首页 > 解决方案 > 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

标签: sqlamazon-redshift

解决方案


我想你想要一个聚合查询

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;

推荐阅读