数据分析师 ---- SQL强化(3)

题目:每个月Top3的周杰伦歌曲

从听歌流水中找到18-25岁用户在2022年每个月播放次数top 3的周杰伦的歌曲

输入例子:
drop table if exists play_log;
create table `play_log` (`fdate` date,`user_id` int,`song_id` int
);
insert into play_log(fdate, user_id, song_id)
values
('2022-01-08', 10000, 0),
('2022-01-16', 10000, 0),
('2022-01-20', 10000, 0),
('2022-01-25', 10000, 0),
('2022-01-02', 10000, 1),
('2022-01-12', 10000, 1),
('2022-01-13', 10000, 1),
('2022-01-14', 10000, 1),
('2022-01-10', 10000, 2),
('2022-01-11', 10000, 3),
('2022-01-16', 10000, 3),
('2022-01-11', 10000, 4),
('2022-01-27', 10000, 4),
('2022-02-05', 10000, 0),
('2022-02-19', 10000, 0),
('2022-02-07', 10000, 1),
('2022-02-27', 10000, 2),
('2022-02-25', 10000, 3),
('2022-02-03', 10000, 4),
('2022-02-16', 10000, 4);drop table if exists song_info;
create table `song_info` (`song_id` int,`song_name` varchar(255),`singer_name` varchar(255)
);
insert into song_info(song_id, song_name, singer_name)
values
(0, '明明就', '周杰伦'),
(1, '说好的幸福呢', '周杰伦'),
(2, '江南', '林俊杰'),
(3, '大笨钟', '周杰伦'),
(4, '黑键', '林俊杰');drop table if exists user_info;
create table `user_info` (`user_id`   int,`age`       int
);
insert into user_info(user_id, age)
values
(10000, 18)
输出例子:
month|ranking|song_name|play_pv
1|1|明明就|4
1|2|说好的幸福呢|4
1|3|大笨钟|2
2|1|明明就|2
2|2|说好的幸福呢|1
2|3|大笨钟|1
例子说明:
1月被18-25岁用户播放次数最高的三首歌为“明明就”、“说好的幸福呢”、“大笨钟”,“明明就”和“说好的幸福呢”播放次数相同,排名先后由两者的song_id先后顺序决定。2月同理。

表:play_log

表:song_info

表:user_info

题目解析:

关于这样的题我们需要找出需要使用的数据,然后再一步一步的解决问题

多表关联:找出每个月周杰伦每一首歌的的播放量

SELECT MONTH(fdate) `month`,s.song_name,count(*) play_pv
FROM play_log p join user_info u
on p.user_id=u.user_id
JOIN (SELECT song_id,song_name FROM song_info where singer_name="周杰伦") s
on p.song_id = s.song_id
GROUP BY `month`,s.song_name

生成排名:根据每一首歌的播放量生成每个月中的播放量排名

使用的是窗口函数:ROW_NUMBER()over()

 SELECT `month`,ROW_NUMBER() over(PARTITION BY month ORDER BY play_pv DESC) ranking,song_name,play_pvFROM (SELECT MONTH(fdate) `month`,s.song_name,count(*) play_pvFROM play_log p join user_info uon p.user_id=u.user_id JOIN (SELECT song_id,song_name FROM song_info where singer_name="周杰伦") son p.song_id = s.song_idGROUP BY `month`,s.song_name) tmp) tmp2

返回排名前3的数据:使用where筛选条件

完整答案

SELECT *
FROM (SELECT `month`,ROW_NUMBER() over(PARTITION BY month ORDER BY play_pv DESC) ranking,song_name,play_pvFROM (SELECT MONTH(fdate) `month`,s.song_name,count(*) play_pvFROM play_log p join user_info uon p.user_id=u.user_id JOIN (SELECT song_id,song_name FROM song_info where singer_name="周杰伦") son p.song_id = s.song_idGROUP BY `month`,s.song_name) tmp) tmp2
where ranking<4
ORDER BY `month`,ranking

答案结果:

注:这里面有一个’播放次数相同,排名先后由两者的song_id先后顺序决定‘这个问题我暂时没有什么好的解决方案,如果你们有好的解决方案可以分享出来。

数据分析师 ---- SQL强化(3)相关推荐

  1. mysql数据生产数据分析_基于MySQL玩转SQL数据分析课程 互联网数据分析师-SQL数据分析实战视频教程...

    基于MySQL玩转SQL数据分析课程 互联网数据分析师-SQL数据分析实战视频教程 课程目录 (1)SQL与数Ju分析;目录中文件数:23个 (1) 开课-课时3SQL与数Ju库的价值.flv (2) ...

  2. 数据分析师要求mysql的_做数据分析师sql需要掌握到什么程度

    SQL是数据分析师必备的技能,那SQL究竟需要掌握到什么程度呢?这篇文章主要分享一下作为数据分析师SQL的学习路线. 很多人喜欢一上来就推荐好几本书,但是这些书晦涩难懂,对于初学者入门非常不友好.入门 ...

  3. 33个必须知道的数据分析师SQL面试问题和答案

    33个必须知道的数据分析师SQL面试问题和答案 SQL是一种强大的编程语言,被广泛用于管理和分析数据.如果你想成为一名数据分析师,或者是正在寻找新工作的现有分析师,准备好回答SQL面试问题是很重要的. ...

  4. 数据分析师-SQL笔试题-做透这道题就够了

    笔者在求职数据分析师岗位时,在知乎上看到了一道非常经典的SQL题,问题来源: link.笔者认为彻底的搞懂这道题以及涉及的知识点,能够通过绝大部分数据分析岗位的SQL笔试.下面是这道题的问题及解答,答 ...

  5. sql 找到上一次_干货 | 想成为商业分析师/数据分析师, SQL竟成硬门槛?

    最近在知乎上看到一个帖子说"Excel与SQL相比 就是计算器与计算机的区别"过气网红Excel表示习惯了 ‍♀️ 不过SQL作为数据库查询和程序设计语言确实被很多名企写在了JD里 ...

  6. CDA数据分析师 - SQL数据库基础 查询连接

    SQL 查询 [应用] 查询单表语句 select语句.from 语句.where 语句.group by 语句.having 语句.order by 语句.limit语句&子查询等 聚合函数 ...

  7. CDA数据分析师 - SQL数据库基础 数据类型表操作语句

    SQL 基础概念 [领会] 关系型数据库基本概念 表的基本概念(字段.记录) 表的约束条件(主键.外键.非空.唯一.自增.默认值) 实体关系图(E-R 图) ANSI-SQL 以及不同的数据库实现的关 ...

  8. sql统计各科成绩大于平均分的人_数据分析师SQL面试必备50题

    以下是SQL面试必备的经典的50道题目,每道题都有博主本人的解题思路和对应的SQL语句. 每道题的思路与答案均为博主本人主观理解,仅供参考. 环境:MySQL8.0 可视化工具:Navicat 1.查 ...

  9. 数据分析sql面试必会6题经典_数据分析师SQL面试必备50题

    以下是SQL面试必备的经典的50道题目,每道题都有博主本人的解题思路和对应的SQL语句. 每道题的思路与答案均为博主本人主观理解,仅供参考. 环境:MySQL8.0 可视化工具:Navicat 1.查 ...

最新文章

  1. CentOS 6.5 PYPI本地源制作
  2. 【转】Android 之最新最全的Intent传递数据方法
  3. 自学python接单_Python接私活,兼职也可以月薪过万,会技术就可走遍天下
  4. 从程序详解拒绝服务***
  5. 动手开始创建第一个 Angular 应用并通过 gh-pages 发布到 Github 上
  6. Java中StringBuilder的清空方法比較
  7. 做实体行业现在难吗?
  8. Vue之路由push
  9. WinPmem:跨平台内存采集工具
  10. 国产银河麒麟 安装wps 的简单方法
  11. 开源VOSK引擎免费语音转文字部署
  12. RISV-Reader小结
  13. 【WPS技能】xlsx表格根据单元格的值改变行背景色
  14. docker swarm 官方文档
  15. 编程数学课:万万没想到,他们都用这个方式学好了数学
  16. Flutter 仿网易云音乐App
  17. 【踩坑专栏】required a bean of type ‘xxx.UserConverter‘ that could not be found
  18. Java完全自学教程
  19. Python爬虫实战(1)——百度贴吧抓取帖子并保存内容和图片
  20. ❤️一文掌握HTML+CSS+JS开发小说阅读器❤️

热门文章

  1. ARM 编程:C语言与汇编间互相调用,参数与返回值的传递方式详解
  2. 数据大爆炸边缘期 让存储告别旧时代
  3. html {font-size: 62.5%}的含义
  4. CSS字体属性之字体系列、字体大小、字体粗细、字体样式以及字体的符合属性(基础详解)
  5. 隧道FM调频广播覆盖技术方案
  6. 利用sklearn 实现ID3、CART、C4.5 算法挑西瓜
  7. 月球可能曾是火星卫星
  8. Cache与主存的三种地址映射详细解读
  9. COSONFT——简析NFT是否能解决DeFi超额抵押的困局
  10. 微信小程序--搜索框样式总结