1、UNION ALL 和 ORDER BY的關系
- 默認是對 UNION ALL 的結果進行排序
@堅果雲附件 UNION ALL 排序問題.xmind - 堅果雲
2、GROUP BY 和 ORDER BY的關系
原始數據:
2.1、ORDER BY 默認是對 GROUP BY 的結果進行排序
結果如下:無論根據什么字段進行排序,排序的數據ID都為1、2。表示GROUP BY選取的結果始終是一致的,ORDER BY 只對該結果排序。
2.2、MAX()函數只取該列的最大值,並非最大值對應的一行。
- 如果只是取某個字段種的最大或者最小值,可以使用MAX()函數。同時該字段可以不必出現在GROUP BY 之后。
- 為什么不是最大值對應的一行,因為10和13對應的ID分別為9和12
-
原理:相當於是在 GROUP BY 后選出本組的最大,對分組沒有起到任何影響!
2.3、使用子查詢,完美解決
注:MYSQL5.7 版本的子查詢的排序需要加 LIMIT 排序才有效
如下:
- 第二條沒生效,第三條生效是因為Mysql版本問題,請知悉。
2.4 子查詢的替代方案
方案一:
如果我們是想找到某一行對應的數據。那么可以分多步執行
- 1、使用MAX函數,找到需要的行的ID;
- 2、使用right join 上一步的數據,就得到了最終結果;