[英]MySQL Query with distinct on a column value
我有這個表(有 100k+ 行):
room_id | emote_id | count | since
----------------------------------------
1 | 22 | 718| 1577135778
1 | 23 | 124| 1577135178
1 | 24 | 842| 1577135641
2 | 22 | 124| 1577135748
2 | 23 | 345| 1577136441
2 | 24 | 43| 1577543578
3 | 22 | 94| 1572135778
3 | 23 | 4718| 1577135641
3 | 24 | 18| 1577134661
4 | 22 | 78| 1577125641
4 | 23 | 128| 1577135778
4 | 24 | 278| 1577132577
我想為每個 emote_id 獲取該 emote_id 計數最高的行
所以對於這個例子,我想得到這個作為回應:
room_id | emote_id | count | since
----------------------------------------
1 | 22 | 718| 1577135778
3 | 23 | 4718| 1577135641
1 | 24 | 842| 1577135641
我一直在構建查詢並需要幫助。 :(
您可以將嵌套子查詢與max()
聚合一起使用
select t1.*
from tab t1
join (select emote_id, max(count) as count
from tab
group by emote_id ) t2
on t1.emote_id = t2.emote_id
and t1.count = t2.count
對於 db 版本 8+,您可以使用窗口分析函數,例如dense_rank()
:
select room_id, emote_id, count, since
from
(
select t.*, dense_rank() over (partition by emote_id order by count desc) as dr
from tab t
) tt
where tt.dr = 1
在平局的情況下,所有匹配的count
最大值都通過使用dense_rank()
返回(對於任何emote_id
具有相等的count
)。 如果分析函數是row_number()
,那么即使出現平局,也只會返回一行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.