mysql 先排序再分組的sql語句實現

2021-08-08 15:32:40 字數 1280 閱讀 2768

最近專案中有乙個需求, 需要先分組,再排序的功能。 搞了好久,經過敏大大(後台兄弟)指導, 終於搞出來了,分享給大家(demo)。
學生資訊表

第一時間想到

sql:

select *from t_test group

by name, type order

by score desc;

結果:

發現,並不能滿足我們需求。 

原因: 先分組了, 然後排序不是我們期望的。

我們希望, 先排序出最高分, 然後分組,每個取一條。

4. 換個思路, 用max來找出分數最高

sql:

select *, max(score) as max_score from t_test group

by name, type;

結果:

5. 然後用right join 關聯主表, 找出全量資訊

sql:

select a.* from t_test as a right join 

(select name, type, max(score) as max_score from t_test group

by name, type) as b on a.name = b.name and a.type = b.type

and a.score = b.max_score

order

by b.name, b.type;

結果:

通過max(), min()可以實現先排序後分組的功能;

用right join 可以獲取全量資訊;

group by中的字段, select才能用, 如name, type;

mysql子查詢先排序再分組的問題

有表如下,要找到 family name 為 green 和 smith 的身高最高的兩個人的 given name。id family name given name height 1 smith mike 157 2 smith ashlin 165 3 smith eason 181 4 sm...

oracle先排序再分頁

oracle排序分頁查詢和mysql資料庫的語句還不一樣,這裡做簡單的記錄。select a.rownum rn from select from v log a order by operatetime desc結果 可以發現,按時間排序了,但是rownum並不是從小到大,因為oracle是先生成...

oracle先排序再分頁

oracle排序分頁查詢和mysql資料庫的語句還不一樣,這裡做簡單的記錄。select a.rownum rn from select from v log a order by operatetime desc結果 可以發現,按時間排序了,但是rownum並不是從小到大,因為oracle是先生成...