簡體   English   中英

Select 每個組的前 N 個最常見列的所有行

[英]Select all rows with top N most frequent columns for each Group

對於每個組,我想獲取包含最受歡迎列的行。

這是一個示例,我有一張包含國家、state 和姓名的表格。

對於每個國家/地區,我將 select 具有前 2 個最流行名稱的行。 在美國,最受歡迎的兩個名字是 John 和 Joe; 對於加拿大,他們是 Will 和 Rafe。

在此處輸入圖像描述

這是文本格式的輸入表。

國家 State 名稱
美國 加州 約翰
美國 西澳大利亞州 傑克
美國 加州
美國 CT
美國 約翰
加拿大 AB
加拿大 AB 雷夫
加拿大 AB 將要
加拿大 公元前 將要
加拿大 公元前 雷夫

還有 output 表。

國家 State 名稱
美國 加州 約翰
美國 加州
美國 CT
美國 約翰
加拿大 AB 雷夫
加拿大 AB 將要
加拿大 公元前 將要
加拿大 公元前 雷夫

如果您的 mysql 版本支持 window function,我們可以使用COUNT聚合通過分組NameCountry來計算每個。

然后使用帶有ROW_NUMBER的自連接來查找每個國家名稱中最流行的前 2 個名稱。

SELECT t2.*
FROM (
  SELECT *,ROW_NUMBER() OVER(PARTITION BY Country ORDER BY cnt desc) rn 
  FROM (
    SELECT Name,Country,COUNT(*)  cnt
    FROM T
    GROUP BY Name,Country
  ) t1
) t1
INNER JOIN T t2
ON t1.Country = t2.Country AND t1.Name = t2.Name
WHERE rn <= 2

sqlfiddle

暫無
暫無

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

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