mysql先排序後分組方法

2021-09-29 20:12:07 字數 1138 閱讀 4713

直接上sql:

select c.* from  (

select

a.id,

a.longitude,

a.latitude,

b.state,

b.id as bid

from

`event`.t_room_info a left join event.t_active b on a.id = b.room_id and b.`status` = 1

where

a.`status` = 1

and a.storey_id = 12

order by a.id,b.state

) as c

group by c.id 

估計大家都是用子查詢解決方法如上,可是分組的取值結果卻沒有按照排序後取第乙個,這裡大家是不是很奇怪!!!(上面的方法在mysql5.7之前是可以使用的)原因是mysql 5.7對子查詢進行了優化,認為子查詢中的order by可以進行忽略,只要derived table裡不包含如下條件就可以進行優化:

1.union clause

2.group by

3.distinct

4.aggregation

5.limit or offset

如果大家對這有興趣可以看下下面鏈結的詳細解釋

mysql · 新特性分析 · 5.7中derived table變形記

select c.* from  (

select

a.id,

a.longitude,

a.latitude,

b.state,

b.id as bid

from

`event`.t_room_info a left join event.t_active b on a.id = b.room_id and b.`status` = 1

where

a.`status` = 1

and a.storey_id = 12

order by a.id,b.state asc limit 9999

) as c

group by c.id 

備註:group by 的特性是分組後會取同一組的第乙個值。所以可以利用分組去重

mybatis先排序後分組

1.乙個統計資料的需求是取每個月資料,並展示當月的總值 因為展示該月總值的話,需要展示該月中記錄時間最大的作為展示 故先要進行排序後再分組 select if sd.tx type 1,sum sd.tx vb 0 as txvb,if sd.tx type 0,sum sd.tx vb 0 as ...

MySql下實現先排序後分組

最近在工作中遇到乙個先排序後分組的需求,發現mysql不同的版本有不同的結果,特此記錄。舉例 要求在shop表中查詢出各型別商店中 最高的商品。表結構 create table shop id int 10 primary key,shop name varchar 100 item name va...

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

最近專案中有乙個需求,需要先分組,再排序的功能。搞了好久,經過敏大大 後台兄弟 指導,終於搞出來了,分享給大家 demo 學生資訊表 第一時間想到 sql select from t test group by name,type order by score desc 結果 發現,並不能滿足我們需...