簡體   English   中英

根據SQL中的另一列查找列值的最大出現次數

[英]Finding the maximum occurrence of a column value based on another column in SQL

我有下表:

Keyword_name Conference_name
------------|-------------
value1      | conference1
value1      | conference1
value2      | conference1
value3      | conference1
value2      | conference2
value1      | conference3
.........................

現在,我想為每個會議查找關鍵字的最大出現次數。 我怎樣才能做到這一點?

所需的結果應如下所示:

Conference_name | Keyword_maximum_occurrence
conference1     | value1
conference2     | value2

這在PostgreSQL中稱為mode()有序集合聚合函數:

SELECT 
  Conference_name, 
  mode() WITHIN GROUP (ORDER BY Keyword_name) AS Keyword_maximum_occurrence
FROM my_table
GROUP BY Conference_name

模式功能的背景在這里

關於MODE() (單個結果)與RANK() (多個結果)的注釋

與基於RANK()的查詢不同( 就像在GurV的答案中一樣 ),我的答案將僅根據ORDER BY子句返回第一個模式。 因此,如果有多個關鍵字出現頻率相同,則此答案將僅返回第一個。 根據您的要求,這可能仍然可以。

嘗試這個:

select
    conference_name,
    keyword_name
from (
    select
        conference_name,
        keyword_name,
        rank() over (partition by conference_name order by count(*) desc) rnk
    from your_table
    group by 
        conference_name,
        keyword_name
) t where rnk = 1;

它根據Conference_name中同一關鍵字的出現次數分配排名,然后進行過濾以獲取排名最高的行。

演示 @ RexTester

暫無
暫無

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

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