簡體   English   中英

如何在 sql (postgresql) 中獲取每組列的最高計數

[英]how to get top count of a column per group in sql (postgresql)

假設我有一張這樣的桌子:

公司 投資者
蘋果 約翰
蘋果 約翰
蘋果 約翰
蘋果 亞歷克斯
谷歌 最大限度
谷歌 最大限度
谷歌 奧利弗

我想寫一個查詢來找到每家公司的頂級投資者並得到這樣的回應:

公司 投資者 數數
蘋果 約翰 3
谷歌 最大限度 2

顯然我的例子很愚蠢,但就數據和預期結果而言,它完全代表了我的擔憂。

更新:

正如@jarlh 所提到的,如果一家公司有不止一個頂級投資者,那么我想得到第一個按名稱排序的,比如如果我們有googleOliver的多行,那么我想得到max2因為在結果中按字母順序排序的名稱;

你可以這樣做

with x as (
select rank() over (partition by company order by count(*) desc, investor) as rank, company,investor,count(*) as qty from test group by company,investor)
select * from x where rank = 1

如果 2 位投資者相等,並且您想同時獲得兩者,則像這樣運行查詢

with x as (
select rank() over (partition by company order by count(*) desc) as rank, company,investor,count(*) as qty from test group by company,investor)
select * from x where rank = 1

結果在這里

請使用以下查詢,

SELECT 
COMPANY
,INVESTOR
,COUNTS
FROM
(
SELECT 
COMPANY
,INVESTOR
,COUNT(*) COUNTS
,DENSE_RANK() OVER (PARTITION BY COMPANY ORDER BY COUNTS DESC) RN
FROM TABLE
GROUP BY COMPANY,INVESTOR

)B
WHERE RN=1

如果出現平局,這將返回所有投資者的姓名。 如果您只需要一個,您可以使用 rank() 而不是 dense_rank() 並按子句順序添加其他字段

暫無
暫無

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

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