使用 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 m.survivalescaperooms.com 2
- 3 a03 3
- 4 a02 4
- 5 a01 5
- 6 a04 6
需求:要求查詢出各用戶的登陸次數和最后登陸時間.
解決辦法:第一種方法,代碼如下:
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 Vevb.com
第二種方法,代碼如下:
- select name,count(id) as login_nums,max(time) as last_time
- from tab1
- group by name
注意此時查詢得到的每個列已經不再屬于原表的同一行記錄了.
新聞熱點
疑難解答