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

mysql之组内排序ROW_NUMBER()函数

有个需求,需要组内排序,之前似乎从未接触过此类排序,故查询了一下,记录sql执行结果。

表如下:

play_log:

日期 (fdate)用户 ID (user_id)歌曲 ID (song_id)
2022-01-08100000
2022-01-16100000
2022-01-20100000
2022-01-25100000
2022-01-02100001
2022-01-12100001
2022-01-13100001
2022-01-14100001
2022-01-10100002
2022-01-11100003
2022-01-16100003
2022-01-11100004
2022-01-27100004
2022-02-05100000
2022-02-19100000
2022-02-07100001
2022-02-27100002
2022-02-25100003
2022-02-03100004
2022-02-16100004

现在要统计,2022年每个月,听的最多的前3首歌曲。

with new_table as(
select month(p.fdate), 
ROW_NUMBER() OVER (PARTITION BY month(p.fdate) order by count(p.song_id) desc) as ranking,
count(p.song_id),
song_id
from play_log p where year(p.fdate)=2022 group by month(p.fdate), song_id
)

select * from new_table where ranking < 4;

因为ranking窗口函数不能在本句内使用,故需要建立一个临时表,然后再从表中筛选前3行的数据。结果输出如下:

month(p.fdate)

ranking

count(p.song_id)

song_id

1

1

4

0

1

2

4

1

1

3

2

3

2

1

2

0

2

2

2

4

2

3

1

1

用法:ROW_NUMBER() OVER (PARTITION BY COLUMN_1 ORDER BY COLUMN_2) 

COLUMN_1 是按哪一列分组,COLUMN_2是按哪一列进一步排序。 

练习习题:每个月Top3的周杰伦歌曲_牛客题霸_牛客网

 


http://www.kler.cn/a/465243.html

相关文章:

  • 设计形成从业务特点到设计模式的关联
  • 领域驱动设计(4)—绑定模型与实现
  • SAP SD销售模块常见BAPI函数
  • Linux Red Hat 7.9 Server安装GitLab
  • BP神经网络的反向传播算法
  • 《计算机网络A》单选题-复习题库
  • Agent系列:AppAgent v2-屏幕智能Agent(详解版)
  • Ajax数据爬取
  • 定制级安全重保方案,确保重大活动期间的网络安全无忧
  • Tailwind CSS:现代 CSS 框架的优雅之选
  • redis的集群模式与ELK基础
  • STM32传感器系列:GPS定位模块
  • 活动预告 |【Part1】Microsoft Azure 在线技术公开课:使用 Azure DevOps 和 GitHub 加速开发
  • spring中使用@Validated,什么是JSR 303数据校验,spring boot中怎么使用数据校验
  • 【行空板K10】MQTT服务器SIoT V2
  • LeetCode - 初级算法 数组(旋转数组)
  • Vue.js组件开发-如何动态设置下拉框数值
  • 使用Python和OpenCV进行视觉图像分割
  • ASP.NET CORE 依赖注入的三种方式,分别是什么,使用场景
  • GitLab集成Runner详细版--及注意事项汇总【最佳实践】
  • vue + iview inputNumber最大最小值限制问题
  • windows remote desktop service 远程桌面RDS授权激活
  • 智能水文:ChatGPT等大语言模型如何提升水资源分析和模型优化的效率
  • 121.【C语言】数据结构之快速排序(未优化的Hoare排序存在的问题)以及时间复杂度的分析
  • mysql删除无用用户
  • 航电系统之行走避障功能篇