sql - 按年份选择最小计数('x')
问题描述
我正在尝试创建一个表格,显示按年份播放次数最少的歌曲。
例如,如果 Song1 和 Song2 都只有 1 次播放,而 Song3 在 2018 年有 2 次播放,Song1 在 2017 年有 1 次播放,而 Song2 在 2017 年有 2 次播放,我想要一个返回 3 行的表格:
歌曲 1 - 2018 - 1 场
Song2 - 2018 - 1 场演出
歌曲 1 - 2017 - 1 场演出
有没有办法显示 min(count('x')) = count('x'). 我确信这不是正确的语法,但它本质上是我想要找到的。
SELECT * FROM music
NATURAL JOIN (SELECT extract(year from date) AS yr, song_code, COUNT('x')
FROM singles NATURAL JOIN plays
GROUP BY extract(year from date), song_code
ORDER BY yr desc, COUNT('x') desc);
目前我将歌曲按一年的播放次数分组,但我不确定如何只显示播放次数最少的歌曲。
解决方案
--您可以更喜欢使用分析函数,例如dense_rank()
而不是连接或子查询。
with songs( id, year, play_id ) as
(
select 1, 2018, 1 from dual union all
select 2, 2018, 1 from dual union all
select 3, 2018, 1 from dual union all
select 3, 2018, 2 from dual union all
select 1, 2017, 1 from dual union all
select 2, 2017, 1 from dual union all
select 2, 2017, 2 from dual
)
select id, year, play_cnt
from
(select s.*, dense_rank() over (partition by year order by play_cnt) dr
from
(select id, year, count(play_id) as play_cnt
from songs s
group by id, year
) s
)
where dr = 1;
ID YEAR PLAY_CNT
---------- ---------- ----------
1 2017 1
2 2018 1
1 2018 1
推荐阅读
- python - 为什么在访问 tbody 标签内的 tr 标签内容时索引会关闭?
- google-apps-script - Google Apps 脚本,与 .map() 方法连接
- python - 打印顺时针排列的数字金字塔
- vba - 如何使代码忽略microsoft word表中的垂直合并列
- heroku - 用于创建用户的 Django djoser 401/400
- mysql - discord.js SQL 命令问题
- python - Python Socket 文件传输发送 -While 循环错误
- reactjs - 为什么我的 React 的组件点击方法是在渲染时触发的?
- r - 如何在 r 中使用 ggplot 对双条进行排序?
- swift - Tableview里面的TableView ios