MySQL高級(jí)查詢之與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)行排序的列名稱中。默認(rèn)順序?yàn)樯颍豢墒褂肁SC將其明確指定。 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)詢的問(wèn)題
或者你可以使用 ROLLUP, 它能用一個(gè)問(wèn)詢提供雙層分析。將一個(gè) WITH ROLLUP修飾符添加到GROUP BY 語(yǔ)句,使詢問(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è)分類列之外的任何列出現(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)詢會(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數(shù)據(jù),查詢QPS,TPS數(shù)據(jù)方式
文章詳細(xì)介紹了查詢MySQL數(shù)據(jù)庫(kù)QPS和TPS的方法和工具,包括直接通過(guò)命令行、PerformanceSchema、mysqladmin、Prometheus、自動(dòng)化腳本等,同時(shí),還提供了優(yōu)化建議,如索引優(yōu)化、SQL調(diào)優(yōu)、事務(wù)控制和配置調(diào)優(yōu)2025-02-02
Linux MYSQL5.7.23 rpm安裝(附帶安裝包)教程
RPM是一種軟件包管理系統(tǒng),常用于基于Red Hat的Linux發(fā)行版,如Fedora和CentOS,它允許用戶通過(guò)預(yù)編譯的二進(jìn)制包快速安裝和管理軟件,這篇文章給大家介紹Linux mysql5.7.23 rpm安裝(附帶安裝包)教程,感興趣的朋友一起看看吧2023-12-12
MySQL數(shù)據(jù)庫(kù)中存儲(chǔ)圖片和讀取圖片的操作代碼
在MySQL數(shù)據(jù)庫(kù)中存儲(chǔ)圖片通常有兩種主要方式:將圖片以二進(jìn)制數(shù)據(jù)(BLOB 類型)直接存儲(chǔ)在數(shù)據(jù)庫(kù)中,或者將圖片文件存儲(chǔ)在服務(wù)器文件系統(tǒng)上,而在數(shù)據(jù)庫(kù)中存儲(chǔ)圖片的路徑或URL,以下是這兩種方法的詳細(xì)解釋,包括存儲(chǔ)和讀取操作,需要的朋友可以參考下2024-11-11
CentOS7下 MySQL定時(shí)自動(dòng)備份的實(shí)現(xiàn)方法
這篇文章主要介紹了CentOS7 下MySQL定時(shí)自動(dòng)備份的實(shí)現(xiàn)方法,主要實(shí)現(xiàn)了數(shù)據(jù)庫(kù)備份,清理過(guò)期備份文件功能,需要的朋友可以參考下2019-12-12
Prometheus 插件mysql_exporter安裝過(guò)程
mysql_exporter是用來(lái)收集MysQL或者M(jìn)ariadb數(shù)據(jù)庫(kù)相關(guān)指標(biāo)的,mysql_exporter需要連接到數(shù)據(jù)庫(kù)并有相關(guān)權(quán)限,這篇文章主要介紹了Prometheus插件安裝(mysql_exporter),需要的朋友可以參考下2023-06-06

