当前位置: 首页 > article >正文

SQL,力扣题目1127, 用户购买平台

一、力扣链接

LeetCode_1127

二、题目描述

支出表: 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')。

编写解决方案找出每天 仅 使用手机端用户、仅 使用桌面端用户和 同时 使用桌面端和手机端的用户人数和总支出金额。

以 任意顺序 返回结果表。

三、目标拆解

四、建表语句

Create table If Not Exists Spending (user_id int, spend_date date, platform ENUM('desktop', 'mobile'), amount int)
Truncate table Spending
insert into Spending (user_id, spend_date, platform, amount) values ('1', '2019-07-01', 'mobile', '100')
insert into Spending (user_id, spend_date, platform, amount) values ('1', '2019-07-01', 'desktop', '100')
insert into Spending (user_id, spend_date, platform, amount) values ('2', '2019-07-01', 'mobile', '100')
insert into Spending (user_id, spend_date, platform, amount) values ('2', '2019-07-02', 'mobile', '100')
insert into Spending (user_id, spend_date, platform, amount) values ('3', '2019-07-01', 'desktop', '100')
insert into Spending (user_id, spend_date, platform, amount) values ('3', '2019-07-02', 'desktop', '100')

五、过程分析

1、手机端、桌面端、手机和桌面端用户情况汇总

2、列出所有平台以及所有用户每天的使用情况

六、代码实现

with t1 as(
select user_id, spend_date, sum(amount) amount,
       case when count(platform) = 1 and max(platform) = 'desktop' then 'desktop' 
       when count(platform) = 1 and max(platform) = 'mobile' then 'mobile'
       when count(platform) = 2 then 'both' end as platform
from Spending group by user_id, spend_date
)
,t2 as(
select distinct spend_date, 'mobile' platform from Spending
union all
select distinct spend_date, 'desktop' from Spending
union all 
select distinct spend_date, 'both' from Spending
)
select t2.spend_date, t2.platform, 
       ifnull(sum(amount), 0) total_amount, 
       ifnull(count(user_id), 0) total_users 
from t2
left join t1 on t2.platform = t1.platform and t2.spend_date = t1.spend_date
group by t2.spend_date, t2.platform;

七、结果验证

八、小结

1、CTE 表达式 + 聚合函数 + group by + ifnull() 

2、注意题目要求列出所有用户每天在三种平台的使用量

3、使用union all 把每天每种平台都列出来进行left jion


http://www.kler.cn/a/387488.html

相关文章:

  • LLMs之MindFormers:基于国产硬件华为Atlas针对GLM-4-9B实现模型全参微调(单机8卡)→模型推理(单卡多batch推理)
  • 《硬件架构的艺术》笔记(一):亚稳态
  • 今天给在家介绍一篇基于jsp的旅游网站设计与实现
  • 丹摩征文活动 | Kolors入门:从安装到全面活用的对比指南
  • 鸿蒙next打包流程
  • MySQL中存储引擎和数据类型
  • 本地 Hadoop 开发环境搭建详解
  • MTK6833/MT6833(天玑700)安卓核心板_联发科5G智能通讯模块安卓主板定制
  • 如何在下载我上传的数据时自动设置 Content-Type
  • Mac brew安装软件镜像加速
  • Android的Handler
  • 手写Golang泛型栈和队列的库函数
  • 万字长文解读深度学习——卷积神经网络CNN
  • JS | JS中获得鼠标位置的属性有哪些?
  • 【ShuQiHere】️`adb kill-server` 和 `adb start-server` 命令的作用
  • 如何自定义一个函数有strlen的功能(不创建新的临时变量)(c基础)
  • 机器学习系列----岭回归(Ridge Regression)简介及实现
  • 【复平面】-复数相乘的几何性质
  • 从0开始深度学习(28)——序列模型
  • 在 CIFAR10 数据集上训练 Vision Transformer (ViT)
  • 解释一下Java中的异常处理机制
  • IDM扩展添加到Edge浏览器
  • 怎么给llama3.2-vision:90b模型进行量化剪枝蒸馏
  • 类加载的生命周期?
  • opencv实时弯道检测
  • 1.6K+ Star!Ichigo:一个开源的实时语音AI项目