网易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;
相关推荐
一只自律的鸡9 小时前
【MySQL】第二章 基本的SELECT语句
数据库·mysql
liliangcsdn10 小时前
如何使用python创建和维护sqlite3数据库
数据库·sqlite
TDengine (老段)16 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)17 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
安当加密17 小时前
云原生时代的数据库字段加密:在微服务与 Kubernetes 中实现合规与敏捷的统一
数据库·微服务·云原生
爱喝白开水a17 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
想ai抽17 小时前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库
武子康17 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
longgyy18 小时前
5 分钟用火山引擎 DeepSeek 调用大模型生成小红书文案
java·数据库·火山引擎
ytttr87318 小时前
C# 仿QQ聊天功能实现 (SQL Server数据库)
数据库·oracle·c#