《MYSQL數據庫MySQL高級查詢之與Group By集合使用介紹》要點:
本文介紹了MYSQL數據庫MySQL高級查詢之與Group By集合使用介紹,希望對您有用。如果有疑問,可以聯系我們。
1?GROUP_CONCATMYSQL數據庫
mysql>?SELECT student_name,
??? ->?????GROUP_CONCAT(test_score)
??? ->?????FROM student
??? ->?????GROUP BY student_name;MYSQL數據庫
Or:MYSQL數據庫
mysql>?SELECT student_name,
??? ->?????GROUP_CONCAT(DISTINCT test_score
??? ->???????????????ORDER BY test_score DESC SEPARATOR ' ')
??? ->?????FROM student
??? ->?????GROUP BY student_name;MYSQL數據庫
在MySQL中,你可以獲取表達式組合的連接值.你可以使用DISTINCT刪去重復值.假若你希望多結果值進行排序,則應該使用? ORDER BY子句.若要按相反順序排列,將?DESC (遞減)?關鍵詞添加到你要用ORDER BY?子句進行排序的列名稱中.默認順序為升序;可使用ASC將其明確指定.?? SEPARATOR?后面跟隨應該被插入結果的值中間的字符串值.默認為逗號?(‘,').通過指定SEPARATOR ''?,你可以刪除所有分隔符.MYSQL數據庫
PS:就是可以在一個語句中得到 GROUP BY 被 聚合的項的每個子值的一個組合的字符串MYSQL數據庫
?2?WITH ROLLUPMYSQL數據庫
GROUP BY子句允許一個將額外行添加到簡略輸出端?WITH ROLLUP?修飾符.這些行代表高層(或高聚集)簡略操作.ROLLUP?因而允許你在多層分析的角度回答有關問詢的問題MYSQL數據庫
或者你可以使用?ROLLUP,?它能用一個問詢提供雙層分析.將一個?WITH ROLLUP修飾符添加到GROUP BY?語句,使詢問產生另一行結果,該行顯示了所有年份的總價值:MYSQL數據庫
mysql>?SELECT year, SUM(profit) FROM sales GROUP BY year WITH ROLLUP;MYSQL數據庫
+------+-------------+MYSQL數據庫
| year | SUM(profit) |MYSQL數據庫
+------+-------------+MYSQL數據庫
| 2000 |??????? 4525 |MYSQL數據庫
| 2001 |??????? 3010 |MYSQL數據庫
| NULL |??????? 7535 |MYSQL數據庫
+------+-------------+MYSQL數據庫
總計高聚集行被年份列中的NULL值標出.MYSQL數據庫
當有多重?GROUP BY?列時,ROLLUP產生的效果更加復雜.這時,每次在除了最后一個分類列之外的任何列出現一個 “break”?(值的改變)?,則問訊會產生一個高聚集累計行.MYSQL數據庫
例如,在沒有?ROLLUP的情況下,一個以年、國家和產品為基礎的關于?sales?表的一覽表可能如下所示:MYSQL數據庫
mysql>?SELECT year, country, product, SUM(profit)MYSQL數據庫
??? ->?FROM salesMYSQL數據庫
??? ->?GROUP BY year, country, product;MYSQL數據庫
+------+---------+------------+-------------+MYSQL數據庫
| year | country | product??? | SUM(profit) |MYSQL數據庫
+------+---------+------------+-------------+MYSQL數據庫
| 2000 | Finland | Computer?? |??????? 1500 |MYSQL數據庫
| 2000 | Finland | Phone????? |???????? 100 |MYSQL數據庫
| 2000 | India?? | Calculator |???????? 150 |MYSQL數據庫
| 2000 | India?? | Computer?? |??????? 1200 |MYSQL數據庫
| 2000 | USA???? | Calculator |????????? 75 |MYSQL數據庫
| 2000 | USA???? | Computer?? |?? ?????1500 |MYSQL數據庫
| 2001 | Finland | Phone????? |????????? 10 |MYSQL數據庫
| 2001 | USA???? | Calculator |????????? 50 |MYSQL數據庫
| 2001 | USA???? | Computer?? |??????? 2700 |MYSQL數據庫
| 2001 | USA???? | TV???????? |???????? 250 |MYSQL數據庫
+------+---------+------------+-------------+MYSQL數據庫
表示總值的輸出結果僅位于年/國家/產品的分析級別.當添加了?ROLLUP后, 問詢會產生一些額外的行:MYSQL數據庫
mysql>?SELECT year, country, product, SUM(profit)MYSQL數據庫
??? ->?FROM salesMYSQL數據庫
??? ->?GROUP BY year, country, product WITH ROLLUP;MYSQL數據庫
+------+---------+------------+-------------+MYSQL數據庫
| year | country | product??? | SUM(profit) |MYSQL數據庫
+------+---------+------------+-------------+MYSQL數據庫
| 2000 | Finland | Computer?? |??????? 1500 |MYSQL數據庫
| 2000 | Finland | Phone????? |???????? 100 |MYSQL數據庫
| 2000 | Finland | NULL?????? |??????? 1600 |MYSQL數據庫
| 2000 | India?? | Calculator |???????? 150 |MYSQL數據庫
| 2000 | India?? | Computer?? |??????? 1200 |MYSQL數據庫
| 2000 | India?? | NULL?????? |??????? 1350 |MYSQL數據庫
| 2000 | USA???? | Calculator |????????? 75 |MYSQL數據庫
| 2000 | USA???? | Computer?? |??????? 1500 |MYSQL數據庫
| 2000 | USA???? | NULL?????? |??????? 1575 |MYSQL數據庫
| 2000 | NULL??? | NULL?????? |??????? 4525 |MYSQL數據庫
| 2001 | Finland | Phone????? |????????? 10 |MYSQL數據庫
| 2001 | Finland | NULL?????? |????????? 10 |MYSQL數據庫
| 2001 | USA???? | Calculator |????????? 50 |MYSQL數據庫
| 2001 | USA???? | Computer?? |??????? 2700 |MYSQL數據庫
| 2001 | USA???? | TV???????? |???????? 250 |MYSQL數據庫
| 2001 | USA???? | NULL?????? |????? ??3000 |MYSQL數據庫
| 2001 | NULL??? | NULL?????? |??????? 3010 |MYSQL數據庫
| NULL | NULL??? | NULL?????? |??????? 7535 |MYSQL數據庫
+------+---------+------------+-------------+MYSQL數據庫
當你使用?ROLLUP時,?你不能同時使用?ORDER BY子句進行結果排序.換言之,?ROLLUP?和ORDER BY?是互相排斥的.然而,你仍可以對排序進行一些控制.在?MySQL中,?GROUP BY?可以對結果進行排序,而且你可以在GROUP BY列表指定的列中使用明確的?ASC和DESC關鍵詞,從而對個別列進行排序.?(不論如何排序被ROLLUP添加的較高級別的總計行仍出現在它們被計算出的行后面).MYSQL數據庫
LIMIT可用來限制返回客戶端的行數.LIMIT?用在?ROLLUP后面,?因此這個限制 會取消被ROLLUP添加的行MYSQL數據庫
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/5370.html