mysql5.7 先排序ORDER BY,后分組 GROUP BY

場景:在數(shù)據(jù)庫中,當同一個目標有多個值時,需要按序找出其對應最大/最小的那一條,或者是按序的第多少條。使用簡單的order by 和 group by無法滿足,因為mysql是先執(zhí)行group by,后執(zhí)行order by的,這樣先group by就不是想要的排序結果。

image.png

解決:可以使用子查詢的limit,然后再查詢子查詢出來的表。

需要注意一點:
SELECT * FROM
(SELECT * FROM dmall.d_appoint_order ORDER BY order_id DESC) temp
GROUP BY temp. order_id
發(fā)現(xiàn)排序居然沒有生效,頓時很驚訝

explain 查看執(zhí)行計劃,發(fā)現(xiàn)在沒有 limit 的情況,會少了一個derived 操作,mysql會認為這時候不需要排序,內部做了優(yōu)化,所以這種情況下加limit限制就可以了,如下

SELECT * FROM
(SELECT * FROM dmall.d_appoint_order ORDER BY order_id DESC limit 100) temp
GROUP BY temp. order_id

SELECT tmp.id,tmp.appointNo,tmp.orderId FROM (  
    SELECT 
    id,
    appoint_no AS appointNo, 
    company_id AS companyId, 
    order_id AS orderId, 
    FROM dmall.d_appoint_order 
    WHERE 
    appoint_no IN ( "20200618000002", "20200618000003", "20200618000004" ) 
    AND is_sub_order=1 
    AND order_status=1 
    AND is_cancel=0 
    ORDER BY appoint_no ASC ,order_id DESC LIMIT 100
) tmp
GROUP BY tmp.appointNo
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容