假設我有下表:
我的表
| 一種 | 乙 |
|---|---|
| a1 | 乙1 |
| a1 | 乙1 |
| a1 | b2 |
| a2 | 乙1 |
| a2 | b2 |
| a2 | b2 |
| a2 | b2 |
我想要一個查詢,它會為每種型別的 b 回傳我找到具有 b 型別的最大計數及其計數的 a。例如在上表中,我希望結果是:
| 乙 | a_with_max_b | MAX(count_of_b) |
|---|---|---|
| 乙1 | a1 | 2 |
| b2 | a2 | 3 |
到目前為止,我到達了這個查詢:
SELECT b , MAX(count_of_b)
FROM
(SELECT a, b, COUNT(b) count_of_b
FROM my_table
GROUP BY a, b)
GROUP BY b;
這將回傳正確的結果,但沒有 a。
| 乙 | MAX(count_of_b) |
|---|---|
| 乙1 | 2 |
| b2 | 3 |
但如果我添加 a :
SELECT b, a a_with_max_b , MAX(count_of_b)
FROM
(SELECT a, b, COUNT(b) count_of_b
FROM my_table
GROUP BY a, b)
GROUP BY b;
我只會收到一個隨機的 a 而不是正確的。例如:
| 乙 | a_with_max_b | MAX(count_of_b) |
|---|---|---|
| 乙1 | a1 | 2 |
| b2 | a1 | 3 |
我錯過了什么?
提前致謝,埃拉德
uj5u.com熱心網友回復:
SELECT a, b, COUNT(*) counts
FROM mytable
GROUP BY a, b
給出原始計數資料,并將其作為子查詢重用
SELECT *
FROM (
SELECT a, b, COUNT(*) counts
FROM mytable
GROUP BY a, b
) m
WHERE ( b, counts ) IN (
SELECT b, MAX(counts)
FROM (
SELECT a, b, COUNT(*) counts
FROM mytable
GROUP BY a, b
) n
GROUP BY b
)
uj5u.com熱心網友回復:
這包括兩個步驟:
- 計算每個 a 和 b 的行數
- 找到每個 b 的最大計數
然后只顯示 a 和 b 對,當然每個 b 的最大計數。
select b, a as a_with_max_b, max_count_of_b
from
(
select
a, b,
count(*) as cnt,
max(count(*)) over (partition by b) as max_count_of_b
from my_table
group by a, b
)
where cnt = max_count_of_b
order by b, a;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/325104.html
上一篇:每條記錄在總和中的運行總百分比。Presto/雅典娜/SQL
下一篇:對于大于1的記錄計數,檢索最小值
