SELECT查詢的應用(三)
2024-07-21 02:30:52
供稿:網友
分類匯總
結構化查詢(SQL)的另一個強大的功能是分類匯總,也就是GROUP子句;MySQL當然也提供這個功能。現在還以我在《SELECT查詢的應用(二)JOIN子句的用法》中的數據庫為例說說GROUP子句的用法。
一、查詢每個客戶的交易次數。COUNT()是一個與GROUP子句一起使用的函數,它的作用是計數:
SELECT customer,COUNT(*) AS sale_count FROM sales GROUP BY customer
返回的查詢可能結果為:
+----------+------------+
| customer | sale_count |
+----------+------------+
| 1 | 1 |
+----------+------------+
| 2 | 1 |
+----------+------------+
表示了代碼為1和2的兩個客戶分別有一次交易。
二、查詢每個客戶的交易總額。SUM()是一個與GROUP子句一起使用的函數,它的作用是求和:
SELECT customer,SUM(PRice*amount) AS total_price FROM sales GROUP BY customer
返回的查詢結果可能為:
+----------+-------------+
| customer | total_price |
+----------+-------------+
| 1 | 12000.00 |
+----------+-------------+
| 2 | 12000.00 |
+----------+-------------+
表示了代碼為1和2的兩個客戶各有12000元的交易額。其中SUM(price*amount)表示先將price和amount即單價和數量相乘后再求和,亦即總價。
三、查詢每個客戶的平均每次交易額。AVG()是求平均值的函數:
SELECT customer,AVG(price*amount) AS avg_price FROM sales GROUP BY customer
返回的查詢結果可能為:
+----------+-----------+
| customer | avg_price |
+----------+-----------+
| 1 | 12000.00 |
+----------+-----------+
| 2 | 12000.00 |
+----------+-----------+
表示了代碼為1和2的兩個客戶的平均每次交易的交易額都是12000元。由于我預設的數據量比較小,查詢的結果不甚明顯,請讀者諒解。可以隨意向sales表中添加一些數據,數據量越大,結果越明顯。
四、查詢每個客戶最大的和最小的一筆成交額。MAX()和MIN()函數分別是取最大值和最小值的函數:
SELECT customer,MAX(price*amount) AS max_price,MIN(price*amount) AS min_price FROM sales GROUP BY customer
返回的查詢結果可能為:
+----------+-----------+-----------+
| customer | max_price | min_price |
+----------+-----------+-----------+
| 1 | 12000.00 | 12000.00 |
+----------+-----------+-----------+
| 2 | 12000.00 | 12000.00 |
+----------+-----------+-----------+
五、查詢每一種貨物售出的平均價格。
SELECT good_code,avg(price) AS avg_price FROM sales GROUP BY good_code
對么?不對!這樣查詢到的是每種貨物各條銷售記錄中價格的平均值,并不是實際售出的所有該貨物的平均價格;對我們來說,有用的是按照銷售數量加權平均的價格:
SELECT good_code,sum(price*amount)/sum(amount) AS avg_price FROM sales GROUP BY good_code
返回的查詢結果可能為:
+-----------+-----------+
| good_code | avg_price |
+-----------+-----------+
| A0001 | 1200.00 |
+-----------+-----------+
六、查詢售給不同客戶的每一種貨物售出的平均價格。只要在GROUP子句中多加一個關鍵字:
SELECT good_code,customer,sum(price*amount)/sum(amount) AS avg_price FROM sales GROUP BY good_code,customer
返回的查詢結果可能為:
+-----------+----------+-----------+
| good_code | customer | avg_price |
+-----------+----------+-----------+
| A0001 | 1 | 1200.00 |
+-----------+----------+-----------+
| A0001 | 2 | 1200.00 |
+-----------+----------+-----------+
所有客戶和所售貨物兩項相同的記錄匯總到一起來求平均,就形成了售給不同客戶的每一種貨物售出的平均價格。