我正在嘗試獲取欄位的最大計數。這就是我得到的,也是我試圖做的。
| col1 | col2 |
| A | B |
| A | B |
| A | D |
| A | D |
| A | D |
| C | F |
| C | G |
| C | F |
我正在嘗試獲取 的最大次數col2,按 分組col1。
通過這個查詢,我得到了按col1和分組的事件col2。
SELECT col1, col2, count(*) as conta
FROM tab
WHERE
GROUP by col1, col2
ORDER BY col1, col2
我得到:
| col1 | col2 | conta |
| A | B | 2 |
| A | D | 3 |
| C | F | 2 |
| C | G | 1 |
然后我使用這個查詢來獲得最大計數:
SELECT max(conta) as conta2, col1
FROM (
SELECT col1, col2, count(*) as conta
FROM tab
WHERE
GROUP BY col1, col2
ORDER BY col1, col2
) AS derivedTable
GROUP BY col1
我得到:
| col1 | conta |
| A | 3 |
| C | 2 |
我缺少的是col2. 我想要這樣的東西:
| col1 | col2 | conta |
| A | D | 3 |
| C | F | 2 |
問題是,如果我嘗試選擇該col2欄位,我會收到一條錯誤訊息,我必須在 group by 或聚合函式中使用此欄位,但在 group by 中使用它不是正確的方法。
uj5u.com熱心網友回復:
更簡單、更快(正確):
SELECT DISTINCT ON (col1)
col1, col2, count(*) AS conta
FROM tab
GROUP BY col1, col2
ORDER BY col1, conta DESC;
db<> fiddle here(基于 a_horse 的小提琴)
DISTINCT ON在聚合后應用,所以我們不需要子查詢或 CTE。考慮SELECT查詢中的事件序列:
- 在應用 LIMIT 之前獲得結果計數的最佳方法
- 選擇每個 GROUP BY 組中的第一行?
uj5u.com熱心網友回復:
您可以使用視窗函式結合GROUP BY -它獲取評估后,該組由:
with cte as (
SELECT col1, col2,
count(*) as conta,
dense_rank() over (partition by col1 order by count(*) desc) as rnk
FROM tab
WHERE ...
GROUP by col1, col2
)
select col1, col2, conta
from cte
where rnk = 1
order by col1, col2;
這將兩次回傳具有相同最高最大計數的 col1,col2 的組合。如果您不想要那樣,請使用row_number()代替dense_rank()
在線示例
uj5u.com熱心網友回復:
可能不是最優雅的解決方案,但使用通用表運算式可能會有所幫助。
with cte as (
select col1, col2, count(*) as total
from dtable
group by col1, col2
)
select col1, col2, total
from cte c
where total = (select max(total)
from cte cc
where cc.col1 = c.col1)
order by col1 asc
退貨
col1|col2|total|
---- ---- -----
A | D | 3|
C | F | 2|
從檔案
uj5u.com熱心網友回復:
我誤解了這個問題。這是您的解決方案:
;with tablex as
(Select col1, col2, Count(col2) as Count From Your_Table Group by col1, col2),
aaaa as
(Select ROW_NUMBER() over (partition by col1 order by Count desc) as row, * From tablex)
Select * From aaaa Where row = 1
uj5u.com熱心網友回復:
使用視窗函式:
select distinct on (col1) col1, col2, cnt
from
(
select col1, col2, count(*) over (partition by col1, col2) cnt
from the_table
) t
order by col1, cnt desc;
| 第 1 列 | 列2 | cnt |
|---|---|---|
| 一個 | D | 3 |
| C | F | 2 |
此解決方案不解決有關系的情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383301.html
標籤:sql PostgreSQL的 数数 总计的 每组最大 n
