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

SQL每日一练(3)

前言:

难得看到了套好题,没考我,呜呜,今日第三更!

原始表(ai生成)

1. 销售表(sales)

用途:记录每笔销售的产品 ID 及金额。

product_id(产品 ID)sales_amount(销售金额)
1120
1180
2200
3150
3100
4100
550

2. 产品表(products)

用途:记录产品 ID 与产品名称的映射关系。

product_id(产品 ID)product_name(产品名称)
1产品 A
2产品 B
3产品 C
4产品 D
5产品 E

1、查询所有时间内,销售金额占比大于等于 10% 的产品,并按占比大小降序排序,
结果输出:产品名称 销售金额 占比

2、 所有时间内,销售金额占比大于等于 10% 的产品有多少个?占比排第三大的百分比为(四舍五入 2 位小数)?
填写示例:2 11.24%

题目1:思路:窗口函数:利用sum()over()

SELECTp.product_name AS "产品名称",SUM(s.sales_amount) AS "销售金额",ROUND(SUM(s.sales_amount) * 100.0 / SUM(SUM(s.sales_amount)) OVER(), 2) AS "占比"
FROMsales s
JOINproducts p ON s.product_id = p.product_id
GROUP BYp.product_name
HAVING"占比" >= 10  -- 直接引用SELECT中的别名,简化计算
ORDER BY"占比" DESC;

第二种做法:更直观:利用分布查询:

1、计算每个商品的销售金额:

WITH t1 AS (SELECTp.product_name,SUM(s.sales_amount) AS sales_amountFROMsales sJOINproducts p ON s.product_id = p.product_idGROUP BYp.product_name
)

2、计算前10%

SELECTproduct_name AS "产品名称",sales_amount AS "销售金额",ROUND(sales_amount * 100.0 / (SELECT SUM(sales_amount) FROM t1), 2) AS "占比"
FROMt1
WHEREROUND(sales_amount * 100.0 / (SELECT SUM(sales_amount) FROM t1), 2) >= 10
ORDER BY"占比" DESC;

 第二问:在第一问基础上利用count查询个数,where中加查询条件,要注意排名第三大表达方式limit1 offset2或者dense_rank的窗口去查询

1、还是一样的创建t1表,第一次将商品总值计算

WITH t1 AS (SELECTp.product_name,SUM(s.sales_amount) AS sales_amountFROMsales sJOIN products p ON s.product_id = p.product_idGROUP BY p.product_name
),

 2、创建t2表,计算其中10%的商品,利用dense_rank进行排序,where筛选条件

t2 AS (SELECTproduct_name,sales_amount,ROUND(sales_amount * 100.0 / (SELECT SUM(sales_amount) FROM t1), 2) AS ratio,DENSE_RANK() OVER(ORDER BY ratio DESC) AS dense_rank  -- 密集排名处理并列FROM t1WHERE ROUND(sales_amount * 100.0 / (SELECT SUM(sales_amount) FROM t1), 2) >= 10
)

3 select 即可 count(*)从第二问中查询大于10%的个数,max()找dense_rank=3的产品

SELECTCOUNT(*) AS product_count,MAX(CASE WHEN dense_rank = 3 THEN ratio END) AS third_ratio
FROM t2;
http://www.lryc.cn/news/2385590.html

相关文章:

  • Axure高级交互设计:中继器嵌套动态面板实现超强体验感台账
  • 水利数据采集MCU水资源的智能守护者
  • 函数式编程思想详解
  • SAP全面转向AI战略,S/4HANA悄然隐身
  • origin绘图之【如何将横坐标/x设置为文字、字母形式】
  • 工业智能网关建立烤漆设备故障预警及远程诊断系统
  • cv2.VideoWriter_fourcc(*‘mp4v‘)生成的视频无法在浏览器展
  • MySQL 8.0 OCP 1Z0-908 161-170题
  • Kafka Streams 和 Apache Flink 的无状态流处理与有状态流处理
  • React从基础入门到高级实战:React 基础入门 - 简介与开发环境搭建
  • LM-BFF——语言模型微调新范式
  • NVMe高速传输之摆脱XDMA设计2
  • github开源版pymol安装(ubuntu22.04实战版)
  • pycharm无需科学上网工具下载插件的解决方案
  • Halcon计算点到平面的距离没有那么简单
  • 基于DenseNet的医学影像辅助诊断系统开发教程
  • 数据中台如何设计?中台开发技术方案,数据治理方案,大数据建设方案合集
  • Python爬虫设置IP代理
  • Adminer 连接mssql sqlserver
  • C++系统IO
  • 利用 Python 爬虫获取唯品会 VIP 商品详情:实战指南
  • DELL EMC PowerStore BBU更换手册
  • css五边形
  • 三种常见脉冲神经网络编码方式解读
  • Go语言实战:使用 excelize 实现多层复杂Excel表头导出教程
  • STM32F103 HAL多实例通用USART驱动 - 高效DMA+RingBuffer方案,量产级工程模板
  • HTML回顾
  • 机器视觉6-halcon高级教程
  • YOLOv8 的双 Backbone 架构:解锁目标检测新性能
  • 1.4 TypeScript 编译是如何工作的?