mysql中g(shù)roup by與order by一起使用無效的替代方案
發(fā)表時(shí)間:2023-09-03 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]前言最近一年由于工作需要大部分使用的都是NoSql數(shù)據(jù)庫,對關(guān)系型數(shù)據(jù)庫感覺越來越陌生,一個由group by和order by 引發(fā)的血案由此而生。在此做個記錄,以備不時(shí)之需。需求首先,看一下整體的表結(jié)構(gòu),F(xiàn)在查找每個barCode中最新的數(shù)據(jù)。由于數(shù)據(jù)太多,不是很好看到效果。我們就拿一個bar...
前言
最近一年由于工作需要大部分使用的都是NoSql數(shù)據(jù)庫,對關(guān)系型數(shù)據(jù)庫感覺越來越陌生,一個由group by
和order by
引發(fā)的血案由此而生。在此做個記錄,以備不時(shí)之需。
需求
首先,看一下整體的表結(jié)構(gòu)。
現(xiàn)在查找每個barCode
中最新的數(shù)據(jù)。
由于數(shù)據(jù)太多,不是很好看到效果。我們就拿一個barCode
為4565789
的數(shù)據(jù)做示例。
SELECTbarCode,
priCommodityID,
createDateFROMtb_history_versionWHEREbarCode = '4565789'ORDER BYcreateDate DESC;
試錯
由于很久沒有寫過sql了。所以首先想到了用 group by和order by組合查詢。
SELECTbarCode,
priCommodityID,
createDateFROMtb_history_versionWHEREbarCode = '4565789'GROUP BYbarCodeORDER BYcreateDate DESC;
結(jié)果如下:
可以看到這并不是我們想要的結(jié)果,order by
沒有任何效果。
接下來就試一下運(yùn)用子查詢的方式將兩者結(jié)合。先排序再分組
SELECT*FROM(SELECTbarCode,
priCommodityID,
createDateFROMtb_history_versionWHEREbarCode = '4565789'ORDER BYcreateDate DESC) AS AGROUP BYA.barCode;
結(jié)果還是令人失望的
解決
上面兩種方式試過了,雖然結(jié)果讓人傷心,但是工作還是要繼續(xù)。于是就網(wǎng)上找各種資料,看能否用其他方式解決問題。偶然間看到了group_concat
可以實(shí)現(xiàn)分組排序,就拿來試一試
SELECTbarCode,
GROUP_CONCAT(
priCommodityIDORDER BYcreateDate DESC) AS priCommodityID,
GROUP_CONCAT(
createDateORDER BYcreateDate DESC) AS createDateFROMtb_history_versionWHEREbarCode = '4565789';
結(jié)果如下
可以看到順序沒問題了,但是所有數(shù)據(jù)都被拼接在一起了。需要進(jìn)一步做截取字符的處理
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;
ok!到這里就發(fā)現(xiàn)已經(jīng)實(shí)現(xiàn)我們剛開始的需求了。
總結(jié)
group by
和order by
同時(shí)使用是沒有效果的,可以使用group_concat
和groub by
替代。group_concat
內(nèi)可以實(shí)現(xiàn)字段排序。
參考文章
首發(fā)地址
http://www.devzxd.top/2017/05/27/mysql-groupby-orderby.html
以上就是mysql中g(shù)roup by和order by同時(shí)使用無效的替代方案的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。