sql - Rank 函数总是为每个组返回相同的值?
问题描述
目标:找到过去 3 个月的前 200 首曲目。 每个跟踪的消费者数据都要每天。
我用过
RANK () OVER(PARTITION BY report_date ORDER BY SUM(num_streams))
我害怕的是它每天都会给我返回不同的前 200 名,我不希望这样。
我希望前 200 名每天保持不变。但是每天都有不同的消费者数据。
任何想法?
我正在使用 AWS REDSHIFT
我要这个:
Day Track_Title Consumer_counts Rank
Jul 1 Halo 600 1
Jul 1 old town road 200 2
Jul 1 heartbeat 180 3
Jul 2 Halo 500 1
Jul 2 old town road 300 2
Jul 2 heartbeat 400 3
但相反,我明白了
Day Track_Title Consumer_counts Rank
Jul 1 Halo 600 1
Jul 1 old town road 200 2
Jul 1 heartbeat 180 3
Jul 2 Halo 500 1
Jul 2 wish you were here 400 2
Jul 2 old town road 300 3
解决方案
我想你想要一个聚合查询
select Track_Title, sum(Consumer_counts) as total
rank() over (order by sum(Consumer_counts) desc) as ranking
from t
where report_date >= current_date - interval '3 month'
group by Track_Title
order by total desc
limit 200;
如果您想要每天的详细信息,那么我建议您重新加入:
with top200 as (
select Track_Title, sum(Consumer_counts) as total
rank() over (order by sum(Consumer_counts) desc) as ranking
from t
where report_date >= current_date - interval '3 month'
group by Track_Title
order by total desc
limit 200
)
select t.*, top200.ranking
from t join
top200
on t.Track_Title = top200.Track_Title
order by t.report_date, top200.ranking;
推荐阅读
- r - 如何在源文件“SplitColumn.R”中使用 R 中的“splitColumn”按钮
- javascript - Chart JS 中体积数据集的规模较小
- vector-graphics - 对光栅图进行矢量化
- uuid - UUID.randomUUID() 没有给出唯一值
- oracle - ORA-02201: 此处不允许序列
- arrays - 在 SwiftUI 中将 For 转换为 ForEach 循环
- apache-flink - 在 Apache Flink 中使用外部值作为条件
- dynamics-crm - Dynamics CRM 是否可以将在 OnPrem 中创建的解决方案导入到在线版本的 CRM
- jenkins-plugins - Jenkins:配置即代码插件升级问题
- html - 动态生成的 div 表中的备用颜色列