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

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;

相关文章:

  • QML元素 - LevelAdjust
  • Beetle 树莓派RP2350 - 随身气压计
  • Spring Boot中如何对密码等敏感信息进行脱敏处理
  • PCB设计教程【入门篇】——PCB设计基础-PCB构成与组成
  • 国际前沿知识系列五:时间序列建模方法在头部撞击运动学测量数据降噪中的应用
  • linux 内存碎片分析
  • 2025年电工杯数学建模B题【垃圾运输】原创论文分享
  • python第三方库安装错位
  • 机器学习第二十六讲:官方示例 → 跟着菜谱学做经典菜肴
  • Vue中的事件绑定【3】
  • 天地图实景三维数据分享(江苏)
  • 同为科技 智能PDU产品选型介绍 EN10/I801CI
  • 【IEEE 2025】低光增强KANT(使用KAN代替MLP)----论文详解与代码解析
  • docker虚拟化、容器化
  • 从零开始:Python语言进阶之多态
  • redis配置带验证的主从复制
  • 再谈Linux进程:进程等待、进程替换与环境变量
  • C++ 继承详解:基础篇(含代码示例)
  • NRM:快速切换 npm 镜像源的管理工具指南
  • RPG游戏设计战斗篇——战法牧协同作战体系研究
  • 电商个人网站建设/域名注册多少钱
  • 建网站需要什么程序/seo网站优化教程
  • 长沙房产网最新楼盘/seo外链购买
  • 网站建设每天的工作/友情链接代码美化
  • 凉山彝族自治州网站建站/友情链接多久有效果
  • 沙朗镇做网站公司/网站源码下载