MySQL高級(jí)查詢(xún)之與Group By集合使用介紹
1 GROUP_CONCAT
mysql> SELECT student_name,
-> GROUP_CONCAT(test_score)
-> FROM student
-> GROUP BY student_name;
Or:
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR ' ')
-> FROM student
-> GROUP BY student_name;
在MySQL中,你可以獲取表達(dá)式組合的連接值。你可以使用DISTINCT刪去重復(fù)值。假若你希望多結(jié)果值進(jìn)行排序,則應(yīng)該使用 ORDER BY子句。若要按相反順序排列,將 DESC (遞減) 關(guān)鍵詞添加到你要用ORDER BY 子句進(jìn)行排序的列名稱(chēng)中。默認(rèn)順序?yàn)樯?;可使用ASC將其明確指定。 SEPARATOR 后面跟隨應(yīng)該被插入結(jié)果的值中間的字符串值。默認(rèn)為逗號(hào) (‘,')。通過(guò)指定SEPARATOR '' ,你可以刪除所有分隔符。
PS:就是可以在一個(gè)語(yǔ)句中得到 GROUP BY 被 聚合的項(xiàng)的每個(gè)子值的一個(gè)組合的字符串
2 WITH ROLLUP
GROUP BY子句允許一個(gè)將額外行添加到簡(jiǎn)略輸出端 WITH ROLLUP 修飾符。這些行代表高層(或高聚集)簡(jiǎn)略操作。ROLLUP 因而允許你在多層分析的角度回答有關(guān)問(wèn)詢(xún)的問(wèn)題
或者你可以使用 ROLLUP, 它能用一個(gè)問(wèn)詢(xún)提供雙層分析。將一個(gè) WITH ROLLUP修飾符添加到GROUP BY 語(yǔ)句,使詢(xún)問(wèn)產(chǎn)生另一行結(jié)果,該行顯示了所有年份的總價(jià)值:
mysql> SELECT year, SUM(profit) FROM sales GROUP BY year WITH ROLLUP;
+------+-------------+
| year | SUM(profit) |
+------+-------------+
| 2000 | 4525 |
| 2001 | 3010 |
| NULL | 7535 |
+------+-------------+
總計(jì)高聚集行被年份列中的NULL值標(biāo)出。
當(dāng)有多重 GROUP BY 列時(shí),ROLLUP產(chǎn)生的效果更加復(fù)雜。這時(shí),每次在除了最后一個(gè)分類(lèi)列之外的任何列出現(xiàn)一個(gè) “break” (值的改變) ,則問(wèn)訊會(huì)產(chǎn)生一個(gè)高聚集累計(jì)行。
例如,在沒(méi)有 ROLLUP的情況下,一個(gè)以年、國(guó)家和產(chǎn)品為基礎(chǔ)的關(guān)于 sales 表的一覽表可能如下所示:
mysql> SELECT year, country, product, SUM(profit)
-> FROM sales
-> GROUP BY year, country, product;
+------+---------+------------+-------------+
| year | country | product | SUM(profit) |
+------+---------+------------+-------------+
| 2000 | Finland | Computer | 1500 |
| 2000 | Finland | Phone | 100 |
| 2000 | India | Calculator | 150 |
| 2000 | India | Computer | 1200 |
| 2000 | USA | Calculator | 75 |
| 2000 | USA | Computer | 1500 |
| 2001 | Finland | Phone | 10 |
| 2001 | USA | Calculator | 50 |
| 2001 | USA | Computer | 2700 |
| 2001 | USA | TV | 250 |
+------+---------+------------+-------------+
表示總值的輸出結(jié)果僅位于年/國(guó)家/產(chǎn)品的分析級(jí)別。當(dāng)添加了 ROLLUP后, 問(wèn)詢(xún)會(huì)產(chǎn)生一些額外的行:
mysql> SELECT year, country, product, SUM(profit)
-> FROM sales
-> GROUP BY year, country, product WITH ROLLUP;
+------+---------+------------+-------------+
| year | country | product | SUM(profit) |
+------+---------+------------+-------------+
| 2000 | Finland | Computer | 1500 |
| 2000 | Finland | Phone | 100 |
| 2000 | Finland | NULL | 1600 |
| 2000 | India | Calculator | 150 |
| 2000 | India | Computer | 1200 |
| 2000 | India | NULL | 1350 |
| 2000 | USA | Calculator | 75 |
| 2000 | USA | Computer | 1500 |
| 2000 | USA | NULL | 1575 |
| 2000 | NULL | NULL | 4525 |
| 2001 | Finland | Phone | 10 |
| 2001 | Finland | NULL | 10 |
| 2001 | USA | Calculator | 50 |
| 2001 | USA | Computer | 2700 |
| 2001 | USA | TV | 250 |
| 2001 | USA | NULL | 3000 |
| 2001 | NULL | NULL | 3010 |
| NULL | NULL | NULL | 7535 |
+------+---------+------------+-------------+
當(dāng)你使用 ROLLUP時(shí), 你不能同時(shí)使用 ORDER BY子句進(jìn)行結(jié)果排序。換言之, ROLLUP 和ORDER BY 是互相排斥的。然而,你仍可以對(duì)排序進(jìn)行一些控制。在 MySQL中, GROUP BY 可以對(duì)結(jié)果進(jìn)行排序,而且你可以在GROUP BY列表指定的列中使用明確的 ASC和DESC關(guān)鍵詞,從而對(duì)個(gè)別列進(jìn)行排序。 (不論如何排序被ROLLUP添加的較高級(jí)別的總計(jì)行仍出現(xiàn)在它們被計(jì)算出的行后面)。
LIMIT可用來(lái)限制返回客戶端的行數(shù)。LIMIT 用在 ROLLUP后面, 因此這個(gè)限制 會(huì)取消被ROLLUP添加的行
相關(guān)文章
真的了解MySQL中的binlog和redolog區(qū)別
MySQL的binlog和redolog都是用于記錄數(shù)據(jù)庫(kù)操作的日志文件,但是它們有不同的作用和特點(diǎn),今天給大家分享MySQL的binlog和redolog區(qū)別,感興趣的朋友一起看看吧2023-11-11關(guān)于在sql中使用order by實(shí)現(xiàn)排序出錯(cuò)問(wèn)題
這篇文章主要介紹了關(guān)于在sql中使用order by實(shí)現(xiàn)排序出錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08mysql left join的基本用法以及on與where的區(qū)別
我們?cè)趯?xiě)sql語(yǔ)句的時(shí)候,總是無(wú)法避免使用到連接關(guān)鍵詞,比如內(nèi)連接、外連接,下面就是詳細(xì)的介紹,需要的朋友可以參考下2023-05-05MySQL UNION操作符基礎(chǔ)知識(shí)點(diǎn)
在本文里小編給大家整理了關(guān)于MySQL UNION操作符的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。2019-02-02mysql 5.7.17 安裝教程 附MySQL服務(wù)無(wú)法啟動(dòng)的解決方法
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.17安裝教程,并且為大家分享了MySQL服務(wù)無(wú)法啟動(dòng)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03MySql創(chuàng)建帶解釋的表及給表和字段加注釋的實(shí)現(xiàn)代碼
這篇文章主要介紹了MySql創(chuàng)建帶解釋的表以及給表和字段加注釋的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12MySQL一次性創(chuàng)建表格存儲(chǔ)過(guò)程實(shí)戰(zhàn)
這篇文章主要介紹了MySQL一次性創(chuàng)建表格存儲(chǔ)過(guò)程實(shí)戰(zhàn),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07