文章目录

  • 1. 题目
  • 2. 解题

1. 题目

支出表: Spending

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| user_id     | int     |
| spend_date  | date    |
| platform    | enum    |
| amount      | int     |
+-------------+---------+
这张表记录了用户在一个在线购物网站的支出历史,
该在线购物平台同时拥有桌面端('desktop')和手机端('mobile')的应用程序。
这张表的主键是 (user_id, spend_date, platform)。
平台列 platform 是一种 ENUM ,类型为('desktop', 'mobile')。

写一段 SQL 来查找每天 使用手机端用户、 使用桌面端用户、 同时 使用桌面端和手机端的用户人数和总支出金额。

查询结果格式如下例所示:

Spending table:
+---------+------------+----------+--------+
| user_id | spend_date | platform | amount |
+---------+------------+----------+--------+
| 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    |
+---------+------------+----------+--------+Result table:
+------------+----------+--------------+-------------+
| spend_date | platform | total_amount | total_users |
+------------+----------+--------------+-------------+
| 2019-07-01 | desktop  | 100          | 1           |
| 2019-07-01 | mobile   | 100          | 1           |
| 2019-07-01 | both     | 200          | 1           |
| 2019-07-02 | desktop  | 100          | 1           |
| 2019-07-02 | mobile   | 100          | 1           |
| 2019-07-02 | both     | 0            | 0           |
+------------+----------+--------------+-------------+
在 2019-07-01,
用户1 同时 使用桌面端和手机端购买,
用户2 仅 使用了手机端购买,
而用户3 仅 使用了桌面端购买。在 2019-07-02,
用户2 仅 使用了手机端购买,
用户3 仅 使用了桌面端购买,
且没有用户 同时 使用桌面端和手机端购买。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/user-purchase-platform
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 先造出表的各种组合
select distinct spend_date, "desktop" platform from Spending
union
select distinct spend_date, "mobile" platform from Spending
union
select distinct spend_date, "both" platform from Spending
{"headers": ["spend_date", "platform"],
"values": [
["2019-07-01", "desktop"],
["2019-07-02", "desktop"],
["2019-07-01", "mobile"],
["2019-07-02", "mobile"],
["2019-07-01", "both"],
["2019-07-02", "both"]]}
  • 计算每天,某类属下的总金额、人数
select spend_date, if(count(distinct platform)=1, platform, 'both') plat,sum(amount) total_am,count(distinct user_id) total_u # 1 total_u 这么写也对,就1个人
from Spending
group by spend_date, user_id
{"headers": ["spend_date", "plat", "total_am", "total_u"],
"values": [
["2019-07-01", "both", 200, 1],
["2019-07-01", "mobile", 100, 1],
["2019-07-01", "desktop", 100, 1],
["2019-07-02", "mobile", 100, 1],
["2019-07-02", "desktop", 100, 1]]}
  • 上面2表连接
select p.spend_date, p.platform, t.total_am, t.total_u
from
(select distinct spend_date, "desktop" platform from Spendingunionselect distinct spend_date, "mobile" platform from Spendingunionselect distinct spend_date, "both" platform from Spending
) p
left join
(select spend_date, if(count(distinct platform)=1, platform, 'both') plat,sum(amount) total_am,count(distinct user_id) total_ufrom Spendinggroup by spend_date, user_id
) t
on p.platform = t.plat and p.spend_date = t.spend_date
{"headers": ["spend_date", "platform", "total_am", "total_u"], 。
"values": [
["2019-07-01", "desktop", 100, 1],
["2019-07-02", "desktop", 100, 1],
["2019-07-01", "mobile", 100, 1],
["2019-07-02", "mobile", 100, 1],
["2019-07-01", "both", 200, 1],
["2019-07-02", "both", null, null]]}
  • 对连接后的表,求和
# Write your MySQL query statement below
selectspend_date, platform,ifnull(sum(total_am),0) total_amount,ifnull(sum(total_u),0) total_users
from
(select p.spend_date, p.platform, t.total_am, t.total_ufrom(select distinct spend_date, "desktop" platform from Spendingunionselect distinct spend_date, "mobile" platform from Spendingunionselect distinct spend_date, "both" platform from Spending) pleft join(select spend_date, if(count(distinct platform)=1, platform, 'both') plat,sum(amount) total_am,count(distinct user_id) total_ufrom Spendinggroup by spend_date, user_id) ton p.platform = t.plat and p.spend_date = t.spend_date
) temp
group by spend_date, platform

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode MySQL 1127. 用户购买平台 *相关推荐

  1. oracle:用户购买平台案例分析与优化

    用户购买平台案例,涉及时间型数据.个人第一眼感觉特别简单,但是当深入处理是难成狗了.虽然在测试样例中的结果中通过,但是在最终提交过程中,却显示超时.唉,还得优化呀!本文就是关于这个问题的分析和总结. ...

  2. mysql查看用户购买_mysql查询——购买所有产品的客户

    现有两张表,一张订单表(Orders)和一张产品表(Product),需要编写一个查询语句,查找出购买了所有产品的客户编号(CustomerId). 订单表中包含的信息如下: 其中,Id表示订单编号, ...

  3. LeetCode MySQL解题目录

    已完成的 LeetCode MySQL 数据库题目.点击查看我的 LeetCode 算法解题目录. 已解决 123/123 - 简单 54 中等 51 困难 18 前置入门学习 MySQL 基本查询. ...

  4. 基于javaweb+mysql的校园招聘平台招聘管理系统(平台、企业、用户)

    基于javaweb+mysql的校园招聘平台招聘管理系统(平台.企业.用户) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myeclipse/st ...

  5. mysql统一管理平台_统一用户管理平台

    概述 统一用户管理平台是针对国内信息化发展现状而开发的基础软件平台.面对用户的重复登录,系统管理员繁琐的账号管理和系统设置工作,以及如何控制用户的访问权限等问题,统一用户管理平台提供了一个完美的解决方 ...

  6. 基于微信小程序的童装购买平台小程序

    文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/my ...

  7. 基于SSM + MySQL的服饰服装购物平台系统的设计与实现源码+论文+包安装配置+讲解视频

    下载:https://download.csdn.net/download/nike8x/83598568 项目介绍: 基于SSM + MySQL的服饰服装购物平台系统的设计与实现源码+论文+包安装配 ...

  8. 神策数据司沛:加速车企数字化转型,搭建高质量用户数据平台实战

    本文根据神策数据高级售前解决方案顾问司沛<加速车企数字化转型,搭建高质量用户数据平台(CDP)实战>的直播内容整理而成.主要包括: 车企数字化转型之瓶颈以及应对思路 神策数据为车企打造的用 ...

  9. mysql 源码设计,java+mysql大学网络社区平台设计+源代码

    摘要如今,信息管理与信息系统的网络平台上,更多的都是一些静态信息的介绍,缺乏老师与老师之间, 老师与同学之间信息的交流的功能. 因此, 需要建立一个从 Web 1.0转换到 Web 2.0 的, 能够 ...

最新文章

  1. 华为 日志服务器 配置文件,配置日志服务器
  2. ubuntu 中vi的使用方法
  3. 2015结束,2016开始
  4. EL表达式---自定义函数(转)
  5. Python学习笔记(三)数据类型--Number类型
  6. [BZOJ2820]YY的GCD
  7. 程序控制的对象生命周期
  8. Atitit it软件领域职称评级规定,精深方向。 目录 1. 软件工程师资格证 1 1.1. 法规规范 十大标准,三级五晋制。 1 1.2. 三级制 使用者 原理维修者 制造设计者 1 1.3.
  9. MCTS人工智能围棋
  10. 自媒体剪辑视频都在用的6个音效素材网站。
  11. Vue组件-卡片动画倒计时
  12. Python实用技巧:global关键字的用法详解
  13. 滑坡的剖面图怎么用计算机绘制,利用AutoCAD绘制地质图的若干方法
  14. 谁会嫌钱多啊|最适合学生党的Python兼职攻略以及接私活经验
  15. js实现异步任务调度器
  16. mysql 怎么修复表_修复mysql表
  17. 2022高处安装、维护、拆除考试模拟100题及答案
  18. DocumentFragment
  19. matlab中min和max的使用
  20. LLMs:《PaLM: Scaling Language Modeling with Pathways》翻译与解读

热门文章

  1. android tcp socket框架_socket网络编程知识梳理,让你学会造轮子的能力
  2. 计算机系统遵循,自考《计算机系统结构》第10章精讲
  3. 特别慢_背什么都特别慢,该怎么提高记忆力?
  4. C#委托实现C++ Dll中的回调函数
  5. 河北软件职业技术学院计算机专业分数线,河北软件职业技术学院历年分数线 2021河北软件职业技术学院录取分数线...
  6. 第二季4:HI_S32 SAMPLE_VENC_1080P_CLASSIC(HI_VOID)函数的分析
  7. 1000瓶药水,1瓶有毒药,几只小白鼠能够找出毒药
  8. 【windows phone】CollectionViewSource的妙用
  9. 第三次作业:PSP耗时
  10. C/C++语言void及void指针深层探索