簡體   English   中英

MySQL查詢在列值上具有不同

[英]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.

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