力扣1127(MySQL)-用户购买平台(困难)
题目:
支出表: Spending

这张表记录了用户在一个在线购物网站的支出历史,该在线购物平台同时拥有桌面端(‘desktop’)和手机端(‘mobile’)的应用程序。
这张表的主键是 (user_id, spend_date, platform)。
平台列 platform 是一种 ENUM ,类型为(‘desktop’, ‘mobile’)。
问题
写一段 SQL 来查找每天 仅 使用手机端用户、仅 使用桌面端用户和 同时 使用桌面端和手机端的用户人数和总支出金额。
查询结果格式如下例所示:
Spending table:
Result table:

在 2019-07-01, 用户1 同时 使用桌面端和手机端购买, 用户2 仅 使用了手机端购买,而用户3 仅 使用了桌面端购买。
在 2019-07-02, 用户2 仅 使用了手机端购买, 用户3 仅 使用了桌面端购买,且没有用户 同时 使用桌面端和手机端购买。
建表语句:
1 drop table if EXISTS spending_1127;
2 create table if not exists spending_1127(
3 user_id int,
4 spend_date date,
5 platform enum('desktop','mobile'),
6 amount int
7 );
8 truncate table spending_1127;
9 insert into spending_1127 values(1, '2019-07-01', 'mobile','100'),(1, '2019-07-01', 'desktop','100'),(2, '2019-07-01', 'mobile','100'),(2, '2019-07-02', 'mobile','100'),(3, '2019-07-01', 'desktop','100'),(3, '2019-07-02', 'desktop','100');
解题思路:
这道题对于我来说有点困难,参考了一下其他博主的题解
①先查询出每个用户id的platform情况以及交易总额;
1 select user_id, spend_date,if(count(distinct platform) = 2, 'both', platform) as platform,sum(amount) as total_amount
2 from spending_1127
3 group by user_id, spend_date;

②再创建一个临时表,列出platform的情况;
1 select 'desktop' as platform union
2 select 'mobile' as platform union
3 select 'both' as platform

③再使上面两步查询出的临时表内连接,以spend_date,platform分组,使用case when进行数量统计;
1 select spend_date,b.platform,
2 sum(case when a.platform = b.platform then total_amount else 0 end) as total_amount,
3 count(if(a.platform = b.platform, 1, null)) as total_users
4 from (
5 select user_id, spend_date,if(count(distinct platform) = 2, 'both', platform) as platform,sum(amount) as total_amount
6 from spending_1127
7 group by user_id, spend_date
8 ) as a, (
9 select 'desktop' as platform union
10 select 'mobile' as platform union
11 select 'both' as platform
12 )as b
13 group by spend_date,platform
14 order by spend_date

小知识:
内连接分为显示的内连接和隐式的内连接,内连接的结果是笛卡尔积
显示的内连接:有inner join关键字,有on关键字表示的条件;
隐式的内连接:用逗号分隔两个数据库表,条件的表示只能用where。
力扣1127(MySQL)-用户购买平台(困难)的更多相关文章
- 力扣---511. 游戏玩法分析 I
活动表 Activity: +--------------+---------+| Column Name | Type |+--------------+---------+| player ...
- MySQL 在Windows平台上的安装及实例多开
MySQL在Windows平台上的安装及实例多开 by:授客 QQ:1033553122 测试环境 Win7 64 mysql-5.7.20-winx64.zip 下载地址: https://cd ...
- MySQL用户授权 和 bin-log日志 详解和实战(http://www.cnblogs.com/it-cen/p/5234345.html)
看 了上一篇博文的发布时间,到目前已经有三个月没更新博文了.这三个月经历了很多事情,包括工作.生活和感情等等.由于个人发展的原因,这个月准备换工作 啦.在这段时间,我会把Web大型项目中所接触到的技术 ...
- MySQL用户授权 和 bin-log日志 详解和实战
看了上一篇博文的发布时间,到目前已经有三个月没更新博文了.这三个月经历了很多事情,包括工作.生活和感情等等.由于个人发展的原因,这个月准备换工作啦.在这段时间,我会把Web大型项目中所接触到的技术都总 ...
- 基于Inception搭建MySQL SQL审核平台Yearing
基于Inception搭建MySQL SQL审核平台Yearing Inception 1. Inceptionj简介 2. Inception安装 2.1 下载和编译 2.2 启动配置 Yearni ...
- JS数据结构第六篇 --- 二叉树力扣练习题
1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { ...
- C++双指针滑动和利用Vector实现无重复字符的最长子串—力扣算法
题目: 力扣原题链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 给定一个字符串, ...
- day88:luffy:支付宝同步结果通知&接收异步支付结果&用户购买记录&我的订单
目录 1.支付宝同步结果通知 2.用户购买记录表 3.接受异步支付结果 4.善后事宜 5.我的订单 1.支付宝同步结果通知 1.get请求支付宝,支付宝返回给你的参数 当用户输入用户名和密码确认支付的 ...
- 刷题-力扣-122. 买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell ...
- 【力扣】188. 买卖股票的最佳时机 IV
给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意:你不能同时参 ...
随机推荐
- koa-generator - koa 脚手架
koa-generator - koa 脚手架 npm install -g koa-generator 创建 koa2 /tmp/foo && cd /tmp/foo 资料: 基于N ...
- nginx四层和七层负载的配置
四层负载和七层负载是两种不同类型的负载均衡策略,它们分别在网络的不同层次上工作.在Nginx中,这两种负载均衡策略可以通过配置nginx.conf文件来实现. 四层负载(L4 Load Balanci ...
- 小程序登录V2
参考:https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801(通知) https:/ ...
- drf(认证、权限、频率)
一. 认证组件 1. 流程 1. 写一个类,继承BaseAuthentication,重写authenticate,认证的逻辑写在里面. 认证通过,返回两个值,一个值最终给了包装以后的request对 ...
- 详解SSL证书系列(5)SSL证书为什么不能好多年签一次呢
上一篇介绍了详解SSL证书系列(4)免费的SSL证书和收费的证书有什么区别,这一篇我们继续了解一下我们申请的SSL证书为什么不能好多年签一次呢,这样不是更省事吗? SSL证书最多只能签发一年,一年到期 ...
- 记录--Event Loop事件循环、微任务、宏任务
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 JS是一门单线程语言,单线程就意味着,所有的任务需要排队,前一个任务结束,才会执行下一个任务.这样所导致的问题是:如果JS执行的时间 ...
- FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg
FFmpeg支持Linux.macOS.Windows.Android等操作系统,其中Linux系列包括Ubuntu.Debian.Mint.CentOS.RHEL.Fedora等分支.FFmpeg官 ...
- 详解SSL证书系列(6)了解HTTP及网络基础
使用HTTP协议访问Web 你知道当我们在网页浏览器(比如Chrome)的地址栏中输入URL时,Web网页是如何呈现的吗? Web页面当然不会凭空显示出来.根据Web浏览器地址栏中指定的URL,W ...
- 基于电脑软件的任意波形发生器SIG852初识(类似虚拟示波器)
基于电脑软件的任意波形发生器SIG852初识(类似虚拟示波器) 对于从事电路板开发的硬件工程师来说,信号源是经常使用也非常熟悉的.我们用它来作为电路板的输入,测试电路板是否能按预期正常处理这些信号.最 ...
- KingbaseES V8R3集群运维案例之---message length (8) in slot 1 does not match with slot 0(12)故障
案例说明: 在KingbaseES V8R3集群在连接kingbasecluster服务(9999端口)时,出现"message length (8) in slot 1 does not ...