直接上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 結果 發現,並不能滿足我們需...