使用 group by 分組後,查詢的列表將按照主鍵的默認 asc 順序排序,使用 order by 只能對分組後的列表起作用,原因是 order by 的優先級低於 group by,那麼如何解決分組排序呢,下面我們一起來看具體操作辦法。
那麼如何解決使分組後的數據按照主鍵的 desc 排序輸出呢?
答案有兩種方法:
1、使用子查詢先把表進行排序,然後對字表進行 group by 查詢,此時得到的列將是子查詢的得到的一條記錄的列。
2、使用 max 函數對可計算最大值的列進行對比查詢,這種方法將只能使的對比列按照 desc 輸出,不影響其他列。
以上兩種方法的結果不同,使用的時候要按需來使用。
附例子:
表 tab1 有 3 列:主鍵id、名稱name、登錄時間time
id name time
1 a01 1
2 www.bKjia.c0m 2
3 a03 3
4 a02 4
5 a01 5
6 a04 6
需求:
1、要求查詢出各用戶的登陸次數和最後登陸時間
解決辦法:
第一種方法
select sub.name,count(sub.id) as login_nums,sub.time as last_time
from (select * from tab1 order by time) sub
group by sub.name
注意:此時查詢得到的每一個列都屬於原表的同一行記錄,如指定查詢 id,則 id 也是最新時間那行記錄的id bKjia.c0m
第二種方法
select name,count(id) as login_nums,max(time) as last_time
from tab1
group by name
注意此時查詢得到的每個列已經不再屬於原表的同一行記錄了。