簡體   English   中英

這里如何申請group by?

[英]How to apply group by here?

我有一個包含MovieViewer列的 Movie 表,其中任何用戶都可以多次觀看每部電影,因此該表可以有多個相同的條目。 我想找到前 N 部觀看次數最多的電影,然后是每部前 N 部電影的前 K 名觀眾。 在這種情況下如何有效地應用分組依據或分區依據? 或者如果有更好的方法,請分享。 謝謝!

電影 用戶
復仇者聯盟 約翰
蝙蝠俠 克里斯
蝙蝠俠 羅恩
X戰警 克里斯
X戰警 羅恩
矩陣 約翰
蝙蝠俠 馬丁
矩陣 克里斯
蝙蝠俠 克里斯
X戰警 羅恩

所以,在這張表中,蝙蝠俠是觀看次數最多的電影是蝙蝠俠,其次是 X 戰警,所以我希望結果表看起來像:

電影 用戶 查看次數
蝙蝠俠 克里斯 2個
蝙蝠俠 羅恩 1個
蝙蝠俠 馬丁 1個
X戰警 羅恩 2個
X戰警 克里斯 1個
矩陣 約翰 1個
矩陣 克里斯 1個
復仇者聯盟 約翰 1個

我知道我可以按電影分組,然后按 count(*) desc 進行排序,但這並沒有給我第二列,它是按觀眾分組的,也沒有給我每個觀眾的計數。

考慮以下方法(假設 Top 3 電影有 Top 2 用戶)

select movie, user, view_count
from (
  select distinct *,  
    count(*) over(partition by movie) movie_views,
    count(*) over(partition by movie, user) view_count
  from your_table
)
qualify dense_rank() over(order by movie_views desc) <=3 
and row_number() over(partition by movie order by view_count desc) <=2
-- order by movie_views desc, view_count desc     

如果應用於您問題中的示例數據 - output 是

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM