网易SQL面试题

  • 有一张网易云用户播放歌曲全量表dwd_usr_play_song_dd,包含uid(用户id)、singer(歌手名称)、song_name(歌曲名称)、sdate(播放日期)
  • 注意:同一个用户同一首歌每天播放多次,仅存放一次
  • 问题:计算2024年每个月播放次数TOP3的陈奕迅的歌曲

-- 举例如下:

-- 输入

-- dwd_usr_play_song_dd

uid singer song_name sdate

1001 陈奕迅 十年 20241011

1002 陈奕迅 十年 20241011

1003 陈奕迅 十年 20241011

1004 陈奕迅 十年 20241011

1001 陈奕迅 富士山下 20241011

1002 陈奕迅 好久不见 20241011

1003 陈奕迅 好久不见 20241011

1004 陈奕迅 好久不见 20241011

1003 陈奕迅 单车 20241011

1004 陈奕迅 单车 20241011

-- 输出

month song_name rk

10 十年 1

10 好久不见 2

10 单车 3

1.模拟数据:

sql 复制代码
create table dwd_usr_play_song_dd (
uid string(20),
singer string(20),
song_name string(20),
sdate string(20)
);
INSERT INTO dwd_usr_play_song_dd VALUES 
('1001','陈奕迅','十年','20241011'),
('1002','陈奕迅','十年','20241011'),
('1003','陈奕迅','十年','20241011'),
('1004','陈奕迅','十年','20241011'),
('1001','陈奕迅','富士山下','20241011'),
('1002','陈奕迅','好久不见','20241011'),
('1003','陈奕迅','好久不见','20241011'),
('1004','陈奕迅','好久不见','20241011'),
('1003','陈奕迅','单车','20241011'),
('1004','陈奕迅','单车','20241011');

2.思路分析

  • 问题如果看起来比较复杂,那么可以将问题进行如下拆解:
    • 维度:月份、歌曲
    • 事实:播放次数
    • 过滤条件:播放时间为2024年、歌手为陈奕迅
  • 首先计算每个月每首歌播放的次数,然后按照月份进行分组,播放次数进行排名,求出每个月前三名的播放歌曲即可。

1、先获取每一首歌曲的播放次数:

sql 复制代码
select song_name,count(1) playNum from dwd_usr_play_song_dd where singer='陈奕迅' and substr(sdate,0,4) = '2024'
   group by song_name;

2、接着根据排名函数进行排名过滤:

sql 复制代码
with t as (
    select substr(sdate,5,2) `month`,song_name,count(1) playNum from dwd_usr_play_song_dd where singer='陈奕迅' and substr(sdate,0,4) = '2024'
   group by substr(sdate,5,2),song_name
),t2 as (
    select * ,dense_rank() over (order by playNum desc) pm from t
)
select * from t2 where pm <= 3;
相关推荐
倔强的石头_7 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
百锦再4 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest4 天前
数据库SQL学习
数据库·sql