网易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;
相关推荐
RestCloud11 小时前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud11 小时前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence13 小时前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
DemonAvenger20 小时前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化
AAA修煤气灶刘哥1 天前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
RestCloud1 天前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术2 天前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
可涵不会debug2 天前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom2 天前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试