在查詢資料表時,除了直接以「整張資料表」為母體的搜尋方式外,也可以用 GROUP BY 先行將資料表中的資料依照一定條件給分群,然後再進行處理。
在 SQL 敘述句的撰寫上,架構會是如下這樣:
SELECT ... FROM ... WHERE ... GROUP BY...;
這個四個關鍵保留字的順序是不可以前後倒置的。
SELECT <Field 1><Field 2><Field 3>......
FROM <Table Name>
WHERE <Rule>
GROUP BY <Field 1><Field 2><Field 3>......;
回到原本的Product 資料表中來示範:
SELECT category, COUNT(*) FROM Product GROUP BY category;
SELECT sell_price, COUNT(*) FROM Product GROUP BY sell_price;
你會發現 NULL 的也會被查詢到。
SELECT sell_price, COUNT(*) FROM Product WHERE sell_price > 50 GROUP BY sell_price;
例如:有一商品表格如下,價格都是 15 元。
name | price |
---|---|
pen | 15 |
water | 15 |
eraser | 15 |
若以 GROUP BY price
的條件分群後,只會有 price 為 15 的這一群。接著若有 SELECT price
以外的欄位要顯示,那麼要顯示哪一筆資料呢?在 MySQL 上是直接報出錯誤的。
GROUP BY 不能使用 SELECT 中的別名
因為 GROUP BY 的執行順序是在 SELECT 之前的,所以 SELECT 的別名對 GROUP BY 而言會是未定義的名稱
多條件的 GROUP BY ,其排序顯示是會依照條件輸入順序
並沒有這樣的設定,基本上是隨機的