网易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;
相关推荐
添砖java‘’10 小时前
Redis中常用数据结构
数据库·redis·缓存
用户31693538118311 小时前
MyBatis Mapper XML 文件解读
数据库
这个DBA有点耶11 小时前
数据库迁移灰度验证:从读流量到双写再到全量切换的完整路径
数据库·mysql·架构
Wang's Blog11 小时前
PostgreSQL笔记16: 索引基础——概念、类型、创建与最佳实践
数据库·笔记·postgresql
用户31693538118311 小时前
"批量"删除-sql
数据库
瀚高PG实验室12 小时前
SQL优化案例:使用分区表优化SQL查询性能
linux·服务器·数据库·sql·microsoft·postgresql
SelectDB12 小时前
15 分钟搭建 PostgreSQL + Apache Iceberg + Apache Doris 的湖仓分析平台
数据库
SelectDB12 小时前
科大讯飞可观测性底座:从 ES/Loki 到 Apache Doris 的可观测存储分析升级实践
数据库
SelectDB12 小时前
Cisco WebEx 数据平台统一改造:基于 Apache Doris / SelectDB 替换 Trino、Pinot、Iceberg 及 Kyuubi
数据库
数据技术说12 小时前
MySQL 和 PostgreSQL 的 CDC 方案到底有什么区别?
数据库·架构