最近專案中有乙個需求, 需要先分組,再排序的功能。 搞了好久,經過敏大大(後台兄弟)指導, 終於搞出來了,分享給大家(demo)。
學生資訊表![](https://pic.w3help.cc/119/3f0307d7781226cb906bf6b59e3e9.jpeg)
第一時間想到
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是先生成...