mysql group by 无效_Mysql5.7版本group by 子查询中order by 无效的问题解决办法
我們都知道group by 會選擇保留第一條數據,默認是按照id排序的,如果我們想通過別的字段排序,比如最后創建的那條記錄,可以先按照創建時間降序,再group by即可得到每個分組的最新創建的數據。
例:
通過如下sql查出兩條數據
SELECT * FROM xxx WHERE groupId = 11 ORDER BY effectiveDate DESC
現在group by id 看下結果
SELECT a.* FROM ( SELECT * FROM xxx WHERE groupId = 11 ORDER BY effectiveDate desc ) a GROUP BY a.groupId
發現默認返回的是id升序后的第一個結果,這個結果明顯不對的,因為子查詢已經按照?effectiveDate 降序了,應該返回的是id為3的那條才對,其實是因為mysql 5.7版本對這個查詢進行優化了,認為子查詢中的order by可以進行忽略,只要Derived table里不包含如下條件就可以進行優化:
UNION clause
GROUP BY
DISTINCT
Aggregation
LIMIT or OFFSET
鏈接:5.7中Derived table變形記
解決辦法:
通過limit 語句使子查詢的order by生效
SELECT a.* FROM ( SELECT * FROM xxx WHERE groupId = 11 ORDER BY effectiveDate desc limit 111111111) a GROUP BY a.groupId
現在結果是我們期望的結果了。但是這必須保證limit的數量,所以也可以使用DISTINCT實現。
總結
以上是生活随笔為你收集整理的mysql group by 无效_Mysql5.7版本group by 子查询中order by 无效的问题解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ibatis mysql 配置文件详解_
- 下一篇: mysql plugin filed_M