首頁 >資料庫 >mysql教程 >mysql中group by和order by同時使用無效的替代方案

mysql中group by和order by同時使用無效的替代方案

巴扎黑
巴扎黑原創
2017-06-23 11:10:123310瀏覽

前言

最近一年由於工作需要大部分使用的都是NoSql資料庫,對關係型資料庫感覺越來越陌生,一個由group byorder by 引發的血案由此而生。在此做個記錄,以備不時之需。

需求

首先,看一下整體的表格結構。
mysql中group by和order by同時使用無效的替代方案
現在尋找每個barCode中最新的資料。

由於數據太多,不是很好看到效果。我們就拿一個barCode4565789的資料做範例。

SELECTbarCode,
    priCommodityID,
    createDateFROMtb_history_versionWHEREbarCode = '4565789'ORDER BYcreateDate DESC;

mysql中group by和order by同時使用無效的替代方案

試錯

#由於很久沒有寫過sql了。所以首先想到了用 group by和order by組合查詢。

SELECTbarCode,
    priCommodityID,
    createDateFROMtb_history_versionWHEREbarCode = '4565789'GROUP BYbarCodeORDER BYcreateDate DESC;

結果如下:
mysql中group by和order by同時使用無效的替代方案
可以看到這並不是我們想要的結果,order by沒有任何效果。
接下來就試試看運用子查詢的方式將兩者結合。先排序再分組

SELECT*FROM(SELECTbarCode,
            priCommodityID,
            createDateFROMtb_history_versionWHEREbarCode = '4565789'ORDER BYcreateDate DESC) AS AGROUP BYA.barCode;

結果還是令人失望的
mysql中group by和order by同時使用無效的替代方案

#解決

上面兩種方式試過了,雖然結果讓人傷心,但工作還是要繼續。於是上網找各種資料,看能否用其他方式解決問題。偶然間看到了group_concat可以實作分組排序,就拿來試試

SELECTbarCode,
    GROUP_CONCAT(
        priCommodityIDORDER BYcreateDate DESC) AS priCommodityID,
    GROUP_CONCAT(
        createDateORDER BYcreateDate DESC) AS createDateFROMtb_history_versionWHEREbarCode = '4565789';

結果如下
mysql中group by和order by同時使用無效的替代方案
可以看到順序沒問題了,但是所有資料都被拼接在一起了。需要進一步做截取字元的處理

SELECTbarCode,
    SUBSTRING_INDEX(
        group_concat(
            priCommodityIDORDER BYcreateDate DESC),',',1) AS priCommodityID,
    SUBSTRING_INDEX(
        group_concat(
            createDateORDER BYcreateDate DESC),',',1) AS createDateFROMtb_history_versionWHEREbarCode = '4565789'GROUP BYbarCode;

mysql中group by和order by同時使用無效的替代方案
ok!到這裡就發現已經實現我們剛開始的需求了。

總結

group byorder by同時使用是沒有效果的,可以使用group_concat groub by替代。 group_concat內可以實作欄位排序。

參考文章


先發網址

http://www.devzxd.top/2017/05/27/mysql-groupby -orderby.html

以上是mysql中group by和order by同時使用無效的替代方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn