程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL高等查詢之與Group By聚集應用引見

MySQL高等查詢之與Group By聚集應用引見

編輯:MySQL綜合教程

MySQL高等查詢之與Group By聚集應用引見。本站提示廣大學習愛好者:(MySQL高等查詢之與Group By聚集應用引見)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL高等查詢之與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中,你可以獲得表達式組合的銜接值。你可使用DISTINCT刪去反復值。假若你願望多成果值停止排序,則應當應用  ORDER BY子句。若要按相反次序分列,將 DESC (遞加) 症結詞添加到你要用ORDER BY 子句停止排序的列稱號中。默許次序為升序;可以使用ASC將其明白指定。   SEPARATOR 前面追隨應當被拔出成果的值中央的字符串值。默許為逗號 (‘,')。經由過程指定SEPARATOR '' ,你可以刪除一切分隔符。

PS:就是可以在一個語句中獲得 GROUP BY 被 聚合的項的每一個子值的一個組合的字符串

 2 WITH ROLLUP

GROUP BY子句許可一個將額定行添加到簡單輸入端 WITH ROLLUP 潤飾符。這些行代表高層(或高集合)簡單操作。ROLLUP 因此許可你在多層剖析的角度答復有關詢問的成績

或許你可使用 ROLLUP, 它能用一個詢問供給雙層剖析。將一個 WITH ROLLUP潤飾符添加到GROUP BY 語句,使訊問發生另外一行成果,該行顯示了一切年份的總價值:

mysql> SELECT year, SUM(profit) FROM sales GROUP BY year WITH ROLLUP;

+------+-------------+

| year | SUM(profit) |

+------+-------------+

| 2000 |        4525 |

| 2001 |        3010 |

| NULL |        7535 |

+------+-------------+

總計高集合行被年份列中的NULL值標出。

當有多重 GROUP BY 列時,ROLLUP發生的後果加倍龐雜。這時候,每次在除最初一個分類列以外的任何列湧現一個 “break” (值的轉變) ,則問訊會發生一個高集合累計行。

例如,在沒有 ROLLUP的情形下,一個以年、國度和產物為基本的關於 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 |

+------+---------+------------+-------------+

表現總值的輸入成果僅位於年/國度/產物的剖析級別。當添加了 ROLLUP後, 詢問會發生一些額定的行:

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 |

+------+---------+------------+-------------+

當你應用 ROLLUP時, 你不克不及同時應用 ORDER BY子句停止成果排序。換言之, ROLLUP 和ORDER BY 是相互排擠的。但是,你仍可以對排序停止一些掌握。在 MySQL中, GROUP BY 可以對成果停止排序,並且你可以在GROUP BY列表指定的列中應用明白的 ASC和DESC症結詞,從而對個體列停止排序。 (豈論若何排序被ROLLUP添加的較高等其余總計行仍湧現在它們被盤算出的行前面)。

LIMIT可用來限制前往客戶真個行數。LIMIT 用在 ROLLUP前面, 是以這個限制 會撤消被ROLLUP添加的行

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved