捷荀讷 发表于 2026-1-18 17:25:02

第一篇笔记窗口函数(Window Function),记录我学习sql的命苦笔记

窗口函数(Window Function)是:在不减少数据行数的前提下,对数据进行排名/计算/统计。。。
区分与group by:
SELECT category, SUM(total_sales)
FROM sales
GROUP BY category;
如果caegory 1 里面有好几个单品,用group by 不会告诉你每个单品的total——sales是多少,它会把category 1里面的所有sales都加起来。
而窗口不合并行,只“算数”。原来几行 → 还是几行。每一行多了一个“计算结果”。适合:排名、占比、累计、对比
SELECT category, SUM(total_sales) AS cat_sales
FROM sales
GROUP BY category;
categorycat_salesC119C236C324SELECT
product_id,
category,
total_sales,
SUM(total_sales) OVER (PARTITION BY category) AS cat_sales
FROM sales;
product_idcategorytotal_salescat_sales1C112192C17193C214364C222365C32424窗口函数的标准结构:
函数名() OVER (
PARTITION BY 分组规则
ORDER BY 排序规则
)
函数名:你要“算什么”?
ROW_NUMBER():强制唯一名次(1,2,3…)
RANK():并列会跳号(1,2,2,4)
DENSE_RANK():并列不跳号(1,2,2,3)
PARTITION BY:在哪些“范围”里算:
PARTITION BY category (每个category单独算)
PARTITION BY ≠ GROUP BY,回到我前面说过的
用 GROUP BY 的典型问题
“每个类别的总销量是多少?”
“每个部门的人数是多少?”
“每个用户的平均评分是多少?”
特点:每组只要一行答案
用 PARTITION BY 的典型问题
“每个商品在类内的排名?”
“每一行占本组总量的比例?”
“每一行与本组平均值差多少?”
特点:答案必须仍然按行存在(因为你要给每个商品/订单一个排名或对比)
ORDER BY:决定计算顺序
ORDER BY total_sales DESC, product_id ASC (先按销量高的排前面,销量一样,用 product_id 打破平局)
注意:这是给窗口函数用的排序,和查询最后的 ORDER BY 是两回事
例题:牛客刷题SQL48 每个商品的销售总额

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

掳诚 发表于 2026-2-1 14:42:25

不错,里面软件多更新就更好了

忙贬 发表于 2026-2-2 02:18:58

收藏一下   不知道什么时候能用到

阴昭昭 发表于 2026-2-5 08:59:31

谢谢分享,辛苦了

锑砖 发表于 2026-2-6 12:43:11

感谢分享,学习下。

嗳诿 发表于 2026-2-7 10:12:23

东西不错很实用谢谢分享

蓝娅萍 发表于 2026-2-8 01:14:20

鼓励转贴优秀软件安全工具和文档!

迫蔺 发表于 2026-2-8 15:00:47

谢谢分享,辛苦了

尚腱埂 发表于 2026-2-8 18:37:35

懂技术并乐意极积无私分享的人越来越少。珍惜

丝甲坞 发表于 2026-2-9 04:36:40

懂技术并乐意极积无私分享的人越来越少。珍惜

筒濂 发表于 2026-2-9 23:30:24

感谢发布原创作品,程序园因你更精彩

榕闹 发表于 2026-2-11 22:27:34

这个有用。

鞍汉 发表于 2026-2-14 03:46:43

懂技术并乐意极积无私分享的人越来越少。珍惜

锟及 发表于 2026-2-22 07:09:40

很好很强大我过来先占个楼 待编辑

采序 发表于 2026-2-25 12:20:46

懂技术并乐意极积无私分享的人越来越少。珍惜

扒钒 发表于 2026-3-1 13:22:43

新版吗?好像是停更了吧。

谭皎洁 发表于 2026-3-4 06:48:34

这个有用。

奸轲嫣 发表于 2026-3-7 09:02:08

东西不错很实用谢谢分享

卿搞笔 发表于 2026-3-8 05:04:38

感谢发布原创作品,程序园因你更精彩

慎气 发表于 2026-3-8 05:14:54

过来提前占个楼
页: [1] 2
查看完整版本: 第一篇笔记窗口函数(Window Function),记录我学习sql的命苦笔记