窗口函数之ntile()函数讲解

窗口函数之ntile()函数讲解ntile NTILE n 用于将分组数据按照顺序切分成 n 片 返回当前切片值 将一个有序的数据集划分为多个桶 bucket 并为每行分配一个适当的桶数 切片值 第几个切片 第几个分区等概念 它可用于将数据划分为相等的小切片 为每一行分配该小切片的数字序号

大家好,我是讯享网,很高兴认识大家。

ntile 

NTILE(n),用于将分组数据按照顺序切分成n片,返回当前切片值。将一个有序的数据集划分为多个桶(bucket),并为每行分配一个适当的桶数(切片值,第几个切片,第几个分区等概念)。它可用于将数据划分为相等的小切片,为每一行分配该小切片的数字序号。

NTILE不支持ROWS BETWEEN,比如NTILE(2) OVER(PARTITION BY dept_no ORDER BY salary ROWS BETWEEN 3 PRECEDING - AND CURRENT ROW)。

如果切片不均匀,默认增加第一个切片的分布。

例如:

 SELECT name, dept_no, salary, ntile(2) over(order by salary) n1,-- 全局按照salary升序排列,数据切成2份 ntile(2) over(partition by dept_no order by salary) n2, -- 按照dept_no分组,在分组内按照salary升序排列,数据切成2份 ntile(3) over(partition by dept_no order by salary) n3 -- 按照dept_no分组,在分组内按照salary升序排列,数据切成3份 FROM data;

讯享网


这个函数用什么应用场景呢?假如我们想要统计一个cookie,pv数最多的前1/3的天


讯享网

讯享网SELECT id, date, pv, NTILE(3) OVER(PARTITION BY id ORDER BY pv DESC) AS rn FROM data;

rn = 1的记录,就是我们想要的结果。

+---+----------------+---+---+ |id |date |pv |rn | +---+----------------+---+---+ |1 |2015-04-12 |7 |1 | |1 |2015-04-11 |5 |2 | |1 |2015-04-10 |1 |3 | |2 |2015-04-14 |4 |1 | |2 |2015-04-15 |4 |2 | |2 |2015-04-13 |3 |3 | |3 |2015-04-16 |4 |1 | +---+----------------+---+---+

注意:NTILE、ROW_NUMBER、RANK、DENSE_RANK等序列函数不支持window子句。

欢迎关注石榴姐公众号"我的SQL呀",关注我不迷路

 

 

小讯
上一篇 2025-04-05 20:00
下一篇 2025-04-01 23:37

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/69132.html