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

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题:3564. 季节性销售分析

题目:
表:sales

±--------------±--------+
| Column Name | Type |
±--------------±--------+
| sale_id | int |
| product_id | int |
| sale_date | date |
| quantity | int |
| price | decimal |
±--------------±--------+
sale_id 是这张表的唯一主键。
每一行包含一件产品的销售信息,包括 product_id,销售日期,销售数量,以及单价。
表:products

±--------------±--------+
| Column Name | Type |
±--------------±--------+
| product_id | int |
| product_name | varchar |
| category | varchar |
±--------------±--------+
product_id 是这张表的唯一主键。
每一行包含一件产品的信息,包括它的名字和分类。
编写一个解决方案来找到每个季节最受欢迎的产品分类。季节定义如下:

冬季:十二月,一月,二月
春季:三月,四月,五月
夏季:六月,七月,八月
秋季:九月,十月,十一月
一个 分类 的 受欢迎度 由某个 季节 的 总销售量 决定。如果有并列,选择总收入最高的类别 (quantity × price)。

返回结果表以季节 升序 排序。

示例:

输入:

sales 表:

±--------±-----------±-----------±---------±------+
| sale_id | product_id | sale_date | quantity | price |
±--------±-----------±-----------±---------±------+
| 1 | 1 | 2023-01-15 | 5 | 10.00 |
| 2 | 2 | 2023-01-20 | 4 | 15.00 |
| 3 | 3 | 2023-03-10 | 3 | 18.00 |
| 4 | 4 | 2023-04-05 | 1 | 20.00 |
| 5 | 1 | 2023-05-20 | 2 | 10.00 |
| 6 | 2 | 2023-06-12 | 4 | 15.00 |
| 7 | 5 | 2023-06-15 | 5 | 12.00 |
| 8 | 3 | 2023-07-24 | 2 | 18.00 |
| 9 | 4 | 2023-08-01 | 5 | 20.00 |
| 10 | 5 | 2023-09-03 | 3 | 12.00 |
| 11 | 1 | 2023-09-25 | 6 | 10.00 |
| 12 | 2 | 2023-11-10 | 4 | 15.00 |
| 13 | 3 | 2023-12-05 | 6 | 18.00 |
| 14 | 4 | 2023-12-22 | 3 | 20.00 |
| 15 | 5 | 2024-02-14 | 2 | 12.00 |
±--------±-----------±-----------±---------±------+
products 表:

±-----------±----------------±---------+
| product_id | product_name | category |
±-----------±----------------±---------+
| 1 | Warm Jacket | Apparel |
| 2 | Designer Jeans | Apparel |
| 3 | Cutting Board | Kitchen |
| 4 | Smart Speaker | Tech |
| 5 | Yoga Mat | Fitness |
±-----------±----------------±---------+
输出:

±--------±---------±---------------±--------------+
| season | category | total_quantity | total_revenue |
±--------±---------±---------------±--------------+
| Fall | Apparel | 10 | 120.00 |
| Spring | Kitchen | 3 | 54.00 |
| Summer | Tech | 5 | 100.00 |
| Winter | Apparel | 9 | 110.00 |
±--------±---------±---------------±-------

参考解法:

with temp1 as(select CASE WHEN MONTH(sale_date) IN (12, 1, 2) THEN 'Winter'WHEN MONTH(sale_date) IN (3, 4, 5) THEN 'Spring'WHEN MONTH(sale_date) IN (6, 7, 8) THEN 'Summer'WHEN MONTH(sale_date) IN (9, 10, 11) THEN 'Fall'END AS season,p.category,s.sale_id,s.product_id,s.quantity,s.price,s.sale_datefrom sales sleft join products p on s.product_id = p.product_id
),
temp2 as(select season,category,sum(quantity)as total_quantity,sum(quantity * price)as total_revenuefrom temp1group by season,category
),
temp3 as(select *,row_number()over(partition by season order by total_quantity desc,total_revenue desc)as ranknumfrom temp2
)SELECT season,category,total_quantity,total_revenue
FROM temp3
WHERE ranknum = 1
order by season

解释:

  1. temp1 CTE(公共表表达式)
with temp1 as(select CASE WHEN MONTH(sale_date) IN (12, 1, 2) THEN 'Winter'WHEN MONTH(sale_date) IN (3, 4, 5) THEN 'Spring'WHEN MONTH(sale_date) IN (6, 7, 8) THEN 'Summer'WHEN MONTH(sale_date) IN (9, 10, 11) THEN 'Fall'END AS season,p.category,s.sale_id,s.product_id,s.quantity,s.price,s.sale_datefrom sales sleft join products p on s.product_id = p.product_id
)

功能:这个 CTE 将销售数据按季节进行分类。
细节:
使用 CASE 语句来判断每条销售记录的 sale_date 所在的季节。
通过 left join 将 sales 表与 products 表连接,以获取每个销售记录对应的产品类别。
选择的字段包括季节、产品类别、销售ID、产品ID、数量、价格和销售日期。
2. temp2 CTE

temp2 as(select season,category,sum(quantity) as total_quantity,sum(quantity * price) as total_revenuefrom temp1group by season, category
)

功能:这个 CTE 汇总了每个季节和产品类别的销售数量和销售收入。
细节:
使用 SUM 函数计算每个季节和产品类别的总销售数量 (total_quantity) 和总收入 (total_revenue)。
通过 GROUP BY 子句按季节和产品类别进行分组。
3. temp3 CTE

temp3 as(select *,row_number() over(partition by season order by total_quantity desc, total_revenue desc) as ranknumfrom temp2
)

功能:这个 CTE 为每个季节的产品类别分配一个排名。
细节:
使用 ROW_NUMBER() 函数为每个季节的产品类别按销售数量和销售收入进行排名。
PARTITION BY season 表示在每个季节内进行排名,ORDER BY total_quantity DESC, total_revenue DESC 表示首先按销售数量降序排列,如果数量相同,则按销售收入降序排列。
4. 最终查询

SELECT season,category,total_quantity,total_revenue
FROM temp3
WHERE ranknum = 1
ORDER BY season

功能:从 temp3 中筛选出每个季节销售数量和收入最高的产品类别。
细节:
WHERE ranknum = 1 筛选出每个季节的第一名(即销售数量和收入最高的产品类别)。

最后按季节排序。

http://www.xdnf.cn/news/946999.html

相关文章:

  • 均衡后的SNRSINR
  • idea 设置git提交快捷键
  • 【习题】DevEco Studio的使用
  • 《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析(四)DPHY ECC
  • LangGraph 应用实例解析
  • 归并排序算法及其在算法中的应用
  • 使用Python 构建支持主流大模型与 Ollama 的统一接口平台
  • 查找日志文件中​​最后一次出现某个关键词的上下 20 行​​
  • ZYNQ学习记录FPGA(二)Verilog语言
  • matlab自控仿真【第一弹】❀传递函数和输出时域表达式
  • VAS1086Q 奇力科技线性芯片车规用品LED驱动芯片
  • 鸟巢邂逅 3D 全景漫游,一场科技与建筑的梦幻交织​
  • 成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
  • 【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
  • 佰力博科技与您探讨热释电测量的几种方法
  • 边缘计算设备全解析:边缘盒子在各大行业的落地应用场景
  • 如何使用 Ansible 在 Ubuntu 24.04 上安装和设置 LNMP
  • Web中间件--tomcat学习
  • Tomcat 安装和配置
  • tomcat核心组件
  • tomcat组件架构设计
  • ubuntu服务器上极简部署odoo18
  • Spring是如何解决Bean的循环依赖:三级缓存机制
  • 一款用于react-native监听app[AppState]前后台的自定义Hooks开源插件
  • 基于 PyTorch 和 OpenCV 的实时表情检测系统
  • 企业如何增强终端安全?
  • 前端面试题 微信小程序兼容性问题与组件适配策略
  • 融智学本体论体系全景图
  • 西电计组第五章-指令系统
  • VmWare Ubuntu 16.04 搭建DPDK 19.08.2