力扣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 笔交易. 注意:你不能同时参 ...
随机推荐
- Nginx配置https 之 找不到 ./configure
Nginx配置https 之 找不到 ./configure 需求 要配置个https 问题 找不到文件在哪里 教程很简单,发现就是找不到 ./configure 这个文件 这个文件是 安装包的文件, ...
- buildFast.js node.js 快速发布到gitee上,这样就不用每次点击,并且自动弹出发布页面,再点击发布,完美!
buildFast.js node.js 快速发布到gitee上,这样就不用每次点击,并且自动弹出发布页面,再点击发布,完美! const fs = require('fs-extra'); fs.c ...
- MYSQL 主从不一致的原因分析
数据库作为存储数据的组件,数据的一致性一定是要保证的前提,今天给出两个场景来分析数据不一致的原因. binlog同步模式导致主从不一致 在MYSQL 中主库向从库同步数据是利用binlog记录修改操作 ...
- 【stars-one】JetBrains产品试用重置工具
原文[stars-one]JetBrains产品试用重置工具 | Stars-One的杂货小窝 一款可重置JetBrains全家桶产品的试用时间的小工具,与其全网去找激活码,还不如每个月自己手动重置试 ...
- SpringMVC深入总结--Spring中的拦截器
Spring为我们提供了: org.springframework.web.servlet.HandlerInterceptor接口, org.springframework.web.servlet. ...
- Lifecycle详细分析
Lifecycle源码分析 目录介绍 01.Lifecycle的作用是什么 02.Lifecycle的简单使用 03.Lifecycle的使用场景 04.如何实现生命周期感知 05.注解方法如何被调用 ...
- 三维模型3DTile格式轻量化压缩模型变形浅析
三维模型3DTile格式轻量化压缩模型变形浅析 在对三维模型进行轻量化压缩处理的过程中,常常会出现模型变形的现象.这种变形现象多数源于模型压缩过程中信息丢失或误差累积等因素.以下将对此现象进行详细分析 ...
- Hong Kong Azure / .NET club first meetup - WPF business value in the financial industry
The first meeting of the Hong Kong Azure / .NET Club was held on December 29, 2019 at Starbucks, She ...
- 原生js实现table的增加删除
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SpringBoot 常用注解总结
核心注解 1. @SpringBootApplication 主要用于开启自动配置,它也是一个组合注解,主要组合了 @SpringBootConfiguration.@EnableAutoConfig ...