SQL分類匯總 實例
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
[p] 結構化查詢(sql)的另一個強大的功能是分類匯總,也就是group子句;mysql當然也提供這個功能。現在還以我在《select查詢的應用(二)join子句的用法》中的數據庫為例說說group子句的用法。 [br][br] 一、查詢每個客戶的交易次數。count()是一個與group子句一起使用的函數,它的作用是計數: [br][br]select customer,count(*) as sale_count from sales group by customer [br][br]返回的查詢可能結果為: [br][br]+----------+------------+ [br]| customer | sale_count | [br]+----------+------------+ [br]| 1 | 1 | [br]+----------+------------+ [br]| 2 | 1 | [br]+----------+------------+ [br][br]表示了代碼為1和2的兩個客戶分別有一次交易。 [br][br] 二、查詢每個客戶的交易總額。sum()是一個與group子句一起使用的函數,它的作用是求和: [br][br]select customer,sum(price*amount) as total_price from sales group by customer [br][br]返回的查詢結果可能為: [br][br]+----------+-------------+ [br]| customer | total_price | [br]+----------+-------------+ [br]| 1 | 12000.00 | [br]+----------+-------------+ [br]| 2 | 12000.00 | [br]+----------+-------------+ [br][br]表示了代碼為1和2的兩個客戶各有12000元的交易額。其中sum(price*amount)表示先將price和amount即單價和數量相乘后再求和,亦即總價。 [br][br] 三、查詢每個客戶的平均每次交易額。avg()是求平均值的函數: [br][br]select customer,avg(price*amount) as avg_price from sales group by customer [br][br]返回的查詢結果可能為: [br][br]+----------+-----------+ [br]| customer | avg_price | [br]+----------+-----------+ [br]| 1 | 12000.00 | [br]+----------+-----------+ [br]| 2 | 12000.00 | [br]+----------+-----------+ [br][br]表示了代碼為1和2的兩個客戶的平均每次交易的交易額都是12000元。由于我預設的數據量比較小,查詢的結果不甚明顯,請讀者諒解。可以隨意向sales表中添加一些數據,數據量越大,結果越明顯。 [br][br] 四、查詢每個客戶最大的和最小的一筆成交額。max()和min()函數分別是取最大值和最小值的函數: [br][br]select customer,max(price*amount) as max_price,min(price*amount) as min_price from sales group by customer [br][br]返回的查詢結果可能為: [br][br]+----------+-----------+-----------+ [br]| customer | max_price | min_price | [br]+----------+-----------+-----------+ [br]| 1 | 12000.00 | 12000.00 | [br]+----------+-----------+-----------+ [br]| 2 | 12000.00 | 12000.00 | [br]+----------+-----------+-----------+ [br] [br] 五、查詢每一種貨物售出的平均價格。 [br][br]select good_code,avg(price) as avg_price from sales group by good_code [br][br]對么?不對!這樣查詢到的是每種貨物各條銷售記錄中價格的平均值,并不是實際售出的所有該貨物的平均價格;對我們來說,有用的是按照銷售數量加權平均的價格: [br][br]select good_code,sum(price*amount)/sum(amount) as avg_price from sales group by good_code [br][br]返回的查詢結果可能為: [br][br]+-----------+-----------+ [br]| good_code | avg_price | [br]+-----------+-----------+ [br]| a0001 | 1200.00 | [br]+-----------+-----------+ [br][br] 六、查詢售給不同客戶的每一種貨物售出的平均價格。只要在group子句中多加一個關鍵字: [br][br]select good_code,customer,sum(price*amount)/sum(amount) as avg_price from sales group by good_code,customer [br][br]返回的查詢結果可能為: [br][br]+-----------+----------+-----------+ [br]| good_code | customer | avg_price | [br]+-----------+----------+-----------+ [br]| a0001 | 1 | 1200.00 | [br]+-----------+----------+-----------+ [br]| a0001 | 2 | 1200.00 | [br]+-----------+----------+-----------+ [br][br]所有客戶和所售貨物兩項相同的記錄匯總到一起來求平均,就形成了售給不同客戶的每一種貨物售出的平均價格。[/p]
[p]按月統計:[color=#0000ff]select[/color][color=#000000] [/color][color=#ff00ff]convert[/color][color=#000000]([/color][color=#0000ff]char[/color][color=#000000]([/color][color=#800000][b]7[/b][/color][color=#000000]),createtime,[/color][color=#800000][b]20[/b][/color][color=#000000]) [/color][color=#0000ff]as[/color][color=#000000] time,[/color][color=#ff00ff]sum[/color][color=#000000](price*amount) [/color][color=#0000ff]as[/color][color=#000000] hits [/color][color=#0000ff]from[/color][color=#000000] sales [br][/color][color=#0000ff]group[/color][color=#000000] [/color][color=#0000ff]by[/color][color=#000000] [/color][color=#ff00ff]convert[/color][color=#000000]([/color][color=#0000ff]char[/color][color=#000000]([/color][color=#800000][b]7[/b][/color][color=#000000]),createtime,[/color][color=#800000][b]20[/b][/color][color=#000000])[/color][/p] 該文章在 2010/7/3 16:05:50 編輯過 |
關鍵字查詢
相關文章
正在查詢... |