sql - SQL:获取每个类别、每天、每个国家的最高记录?
问题描述
比仅获得每个类别的顶部 # 有点棘手。我想要每个艺术家、每个国家/地区每天的前 2 个视频。
我的代码没有给我正确的结果是:
Select *
From
(
Select t2.*, dense_rank() over(partition by artist order by views desc)
From
(select country, day, artist, song, sum(view) as views
From t1
Group by 1,2,3,4
) t2
)
Where rn >=5
样本数据结果
| Country | Date | artist | video | views | rn |
|---------|------|----------|-------|-------|----|
| US | Jan1 | Beyonce | ab | 100 | 1 |
| US | Jan1 | Beyonce | ac | 99 | 2 |
| US | Jan2 | C. Brown | ad | 89 | 1 |
| US | Jan2 | C. Brown | ai | 103 | 2 |
| AU | Jan1 | Beyonce | bf | 99 | 1 |
| AU | Jan1 | Beyonce | bb | 89 | 2 |
我希望每个国家每天都有所有艺术家,但每个艺术家只有 10 个视频。我对如何实现这一点有点困惑。我通常在窗口功能方面遇到困难,所以我会很感激任何帮助。
我正在使用 Amazon Redshift
谢谢
解决方案
您需要按您提到的所有列进行分区,因为您在这些元素的每个组合中对视图进行排名。因为您已将聚合列重命名为“视图”,所以您需要使用该名称来调用它。最后,如果您想要排名前 2 的视频/歌曲,请使用以下条件:其中 rn <= 2
Select *
From
(
Select t2.*, dense_rank() over(partition by country, day, artist order by views desc)
From
(select country, day, artist, song, sum(views) as views
From t1
Group by 1,2,3,4
) t2
)
Where rn <= 2
推荐阅读
- swiftui - 如何在全局范围内绝对定位子视图
- firebase-realtime-database - 在数据查看器中激活只读和非实时模式以提高浏览器性能 || 现在数据库工作很慢
- flutter - Flutter:未处理的异常:刷新页面时发生在dispose()之后调用的setState()
- excel - 从具有多个页面的网站中抓取数据
- authorization - 在 HCL OneTest Data 中,admin 用户是否有权更改用户的权限?
- apk - 在新的 Google Play 控制台 UI 中找不到“编辑发布”选项
- java - 在运行时更改超时 - Elasticsearch RestHighLevelClient
- apache - 漂亮的 RewriteRule 回到旧格式
- php - 为什么 CI 库不发送电子邮件也不显示错误
- android - android是否支持通知图标的矢量可绘制?