2014-11-06 39 views
0

我不認爲需要樣本數據來理解此問題。我正在寫一個查詢,以確定與每個客戶相關的業務如下:在查詢中誤解按原因分組的要求

select 
    customers.cust_id, 
    sum(OrderItems.Quantity * OrderItems.Item_Price) as total_business 
from 
    Customers 
    left outer join 
    Orders on Customers.cust_id = orders.cust_id 
    left outer join 
    OrderItems on orders.order_num = orderitems.order_num 
-- group by Customers.cust_id -- why do I need this if I'm just trying to access the cust_id column? 
order by total_business 

我不明白爲什麼我需要有group by條款,如果我只是試圖訪問cust_id列。我的印象是我可以訪問(select)屬於新表的任何列。

回答

4

因爲不能將正常列選擇與集合函數混合使用,如sum()

要麼只使用聚合或正常的列或按列分組,並在其餘的使用聚合。

例子:

food table 
------------ 
name type 
------------ 
tomato vegetables 
mango fruits 
kiwi fruits 
potato vegetables 

現在,如果你要的食物名稱,然後使用

select name from food 

如果你想水果的數量,然後

select count(type) from food where type = 'fruits' 

,但如果你要的號碼每種類型的食物然後做

select type, count(*) from food group by type 
+2

+1對於優秀的解釋,但我現在正在重新考慮,因爲你只是讓我浪費了三分鐘的時間試圖找出土豆是否真的是蔬菜。 :) – AHiggins 2014-11-06 14:45:47

0

如果沒有Group By,您的結果集對於每個客戶的每個訂單都會有一行。您需要爲每個客戶提供一行,併爲該客戶提供所有訂單的擴展價格總和。