2012-08-13 61 views
0

我有一個簡單的查詢:什麼不對我的查詢

SELECT stco, sum(STSD) As "Shipped Dollars" 
FROM MSTDW 

這是說有什麼不對與選擇列STCO。

然而,這兩個領域存在,這樣的:

SELECT stco 
FROM MSTDW 

作品,這

SELECT sum(STSD) As "Shipped Dollars" 
FROM MSTDW 

工作過。

兩者有什麼不對?

感謝

+2

您是否缺少GROUP BY語句? – sybkar 2012-08-13 14:59:36

+0

爲了更有幫助,請包含您收到的確切錯誤消息。 「這表示選擇列stco有問題,阻止我們知道你被告知的所有事情。 – MatBailie 2012-08-13 15:06:19

回答

2

我想你想這個,一組通過,拿到你需要組的每個stco

SELECT stco, sum(STSD) As "Shipped Dollars" 
FROM MSTDW 
group by stco 

對於應用聚合函數的總和;無論如何,如果你只是希望所有列的總和(我不認爲你想要的,但我加以防萬一)做

SELECT stco, (select sum(STSD) from MSTDW) As "Shipped Dollars" 
    FROM MSTDW 
    group by stco 

這將列出每個stco,並重復所有列的sum

+0

sum()函數要求所有非加和列(stco)需要分組,以便數據庫可以邏輯地組合數據。像這些功能被稱爲聚合(http://en.wikipedia.org/wiki/Aggregate_function)。 – Milner 2012-08-13 15:00:31

+0

@AndrewBarber正在編輯 – 2012-08-13 15:01:12

+1

@ElVieejo明白了。看起來不錯 :) – 2012-08-13 15:02:39

2

爲了使用聚合函數(例如SUM),您需要定義分組條件:

SELECT stco, sum(STSD) As "Shipped Dollars" 
FROM MSTDW 
GROUP BY stco 

你的第二個查詢工作不stco的原因是因爲該組是隱式的(即。無條件總和)在你要求的單一SUM值。

0

嘛,stcoaggregated,所以你必須加入到GROUP BY

SELECT stco, SUM(STSD) AS "Shipped Dollars" 
FROM MSTDW 
GROUP BY stco 

然而,你也可以申請骨料stco過,像這樣:

SELECT AVG(stco) AS SomeValue, SUM(STSD) AS "Shipped Dollars" 
FROM MSTDW 

一般而言,所有值都必須可以是聚合的,也可以是分組密鑰部分,這些部分將分隔聚合數據區域。