1. 程式人生 > >Mysql 利用group by 分組排序

Mysql 利用group by 分組排序

MySql的group by與oracle有所不同,查詢得欄位可以不用寫聚合函式,查詢結果取得是每一組的第一行記錄。

利用上面的特點,可以利用mysql實現一種獨特的排序;

首先先按某個欄位進行order by,然後把有順序的表進行分組,這樣每組的成員都是有順序的,而mysql預設取得分組的第一行。從而得到每組的最值。

最近工作用的表有這樣一個需求,ip欄位有重複,取最後時間更新的ip。

這是模擬表:


起初我用關聯查詢實現的:

SELECT t.id,t.ip
FROM app t
INNER JOIN
(SELECT ip,MAX(updatetime) m_updatetime
FROM app
GROUP BY 
ip) t1
ON t1.ip=t.ip AND t.updatetime=t1.m_updatetime

但是這種方式,效率太低,查詢太慢了。

現在可以利用mysql的group by特性實現

SELECT
  t.id,
  t.ip
FROM (SELECT *
      FROM app
      ORDER BY updateTime DESC) t
GROUP BY t.ip

先對更新時間降序排列,再取每組的第一條記錄。