当前位置: 首页 > news >正文

【Hive sql 面试题】统计Top3歌单以及每个Top3歌单下的Top3歌曲(难)

表数据如下:

1	1	经典老歌	1	月亮代表我的心
2	1	经典老歌	1	月亮代表我的心
3	1	经典老歌	3	夜来香
4	1	经典老歌	4	我只在乎你
5	1	经典老歌	5	千言万语
6	1	经典老歌	5	千言万语
7	2	流行金曲	7	突然好想你
8	2	流行金曲	8	后来
9	2	流行金曲	9	童话
10	2	流行金曲	10	晴天
11	2	流行金曲	7	突然好想你
12	2	流行金曲	7	突然好想你
13	3	纯音乐集	13	二泉映月
14	3	纯音乐集	14	琵琶语
15	3	纯音乐集	15	梦回还
16	4	欧美音乐	16	Shape of My Heart
17	4	欧美音乐	17	Just the Way You Are
18	4	欧美音乐	18	Hello
19	4	欧美音乐	19	A Thousand Years
20	4	欧美音乐	20	Thinking Out Loud
21	4	欧美音乐	20	Thinking Out Loud
22	4	欧美音乐	18	Hello
23	4	欧美音乐	18	Hello
24	5	民谣时光	24	易燃易爆炸
25	5	民谣时光	25	成全
26	5	民谣时光	25	成全
27	5	民谣时光	25	成全

将数据上传到 linux 并将其加载到hive 表中

建表和加载数据:

create table music(uid int,musiclist_id int,musiclist_name string,music_id int,music_name string
)
row format delimited
fields terminated by '\t';load data local inpath '/home/hivedata/music.txt' into table music;

在这里插入图片描述

解题思路和答案

思路:

核心:

先求出 Top3 歌单,再求出 每个Top3 歌单下面的 Top3 歌曲

1、根据歌单(musiclist_name)分组 count() ,然后拿到次数最多的三个歌单,就是 Top3 歌单

2、将 Top3 歌单与 最开始的music 关联起来,就能拿到 Top3 歌单下面的所有歌曲

3、将关联起来的表通过歌单(musiclist_name)和歌曲(music_name)分组 count() ,就可以拿到每个歌单下的每个歌曲播放次数

4、将播放次数排名( row_number() )

5、根据歌曲排名过滤(where),筛选排名小于等于 3 的,就是 Top3 歌曲

代码:

with t1 as (-- 思路第一步形成 t1 表select musiclist_name,count(*) from music group by musiclist_name order by count(*) desc limit 3
),t2 as (-- 思路第二步形成 t2 表select music.musiclist_name,music.music_name from t1 join music on t1.musiclist_name = music.musiclist_name
),t3 as (-- 思路第三步形成 t3 表select musiclist_name,music_name,count(*) count from t2 group by musiclist_name,music_name
),t4 as (-- 思路第四步形成 t4 表select *,row_number() over (partition by musiclist_name order by count desc) rowNum from t3
)
-- 思路第五步拿到结果
select musiclist_name,music_name from t4 where rowNum <= 3;

运行结果:

在这里插入图片描述

有人可能没有用过 with t1 as()的用法:

就是将查询出来的结果,变成临时表 t ,提供给下面的查询语句使用


http://www.mrgr.cn/news/63182.html

相关文章:

  • Discuz中的关键全局变量`$_G`
  • windows-MySQL8.04-安装配置-2024版本
  • 2024“源鲁杯“高校网络安全技能大赛-Misc-WP
  • 基于SSM+小程序的旅游社交登录管理系统(旅游4)
  • Element UI 表格组件复选框实现单选效果
  • 多GPU训练大语言模型,DDP, ZeRO 和 FSDP
  • JupyterLab,极其强大的下一代notebook!
  • SQL实战训练之,力扣:1843. 可疑银行账户
  • ChatGPT国内中文版镜像网站整理合集(2024/11/01)
  • 北方地区使用哪种通风天窗比较合适?
  • Docker命令备忘录----Linux运维
  • 408——计算机网络(持续更新)
  • Man Up技术服务支持
  • 突破空间限制:4个远程控制电脑的办法!企业局域网远程连接完整版教程分享!(包教包会!)
  • 什么是线程局部变量(ThreadLocal)?
  • 华为配置WLAN跨VLAN的三层漫游示例
  • 音视频入门基础:FLV专题(21)——FFmpeg源码中,获取FLV文件音频信息的实现(上)
  • 开放式耳机品牌排行榜 ,如何挑选开放式耳机
  • Puppeteer点击系统:解锁百度流量点击率提升的解决案例
  • Android OpenGL ES详解——模板Stencil
  • 数智税务 | 数电票:带来税务管理五大新挑战、绘就智慧税务征管新蓝图
  • js、vue、angular中的函数声明方式及特点
  • JVM性能优化实战手册:从监控到调优策略
  • Vatee万腾平台:让企业数字化转型更轻松、更高效
  • 博客搭建之路:hexo博客显示阅读时间和字数
  • lanqiaoOJ 315:寻找3个数的最大乘积