2011-05-30 79 views
0

您好我有一個關於在SQL SUM問題,SQL SUM問題

我有一個查詢,看起來像這樣

SELECT 
SUM (table_one.field + table_two.field) as total_field 
SUM (total_field + table_one.anotherfield) 
FROM 
table_one 
JOIN 
table_two ON table_one.id = table_two.id 
WHERE 
table_one = 1 

但是,這並不工作(在不介意可能的輸入錯誤JOIN語句,只有第二個SUM是查詢在沒有SUM的情況下可以正常工作)

是否有另一種方法來完成它,因爲我需要我的應用程序中的total_field。我可以在應用程序中添加這些數字,但我更願意在sql中執行此操作。

+0

除此之外的其他意見,你的'WHERE'子句是丟失_what_的字段名稱等於1. – 2011-05-30 17:46:09

+0

@Andrew Lazerus是的,當我提出這個問題時我看到了這個問題,但沒有編輯它,因爲它與問題無關。 – 2011-05-31 08:19:08

回答

1

不能使用列別名在聚合再次參考價值,只是SUM;

SELECT 
SUM (table_one.field + table_two.field) as total_field, --your missing a , also 
SUM (table_one.field + table_two.field + table_one.anotherfield) 
FROM 
table_one 
JOIN 
table_two ON table_one.id = table_two.id 
WHERE 
table_one = 1 
+0

奧克感謝這是它,但我個人不喜歡的解決方案,因爲如果它發生了total_field SUM獲取更多的字段,我必須手動編輯第二個SUM。但是,這將現在工作 – 2011-05-30 13:18:16

0

SUM是一個聚合函數。這意味着您可以將字段中的數據聚合到幾個元組中,並將其彙總爲單個元組。

你想要做的是這樣的:

SELECT 
    table_one.field + table_two.field, 
    table_one.field + table_two.field + table_one.anotherfield 

或也許這:

SELECT 
    SUM(table_one.field) + SUM(table_two.field), 
    SUM(table_one.field) + SUM(table_two.field) + SUM(table_one.anotherfield) 
0

嘗試在第二個SUM()中將「total_field」替換爲「table_one.field + table_two.field」。

0

名稱「total_field」是一個別名,因此不能在聚合函數中使用 最簡單和最快捷的方法是在第二次計算中簡單地替換total_field的代碼。

SELECT 
    SUM (ISNULL(table_one.field,0) + ISNULL(table_two.field,0)) as total_field 
    SUM (ISNULL(table_one.field,0) + ISNULL(table_two.field,0) +  IsNUll(table_one.anotherfield,0)) 
from 
    table_one 

由於您的代碼不支持字段中的空值,所以在總和值時可能會收到警告。我建議如上使用ISNULL,如果有一個空值,只把它當作0

+0

在數據庫和應用程序設計中,我總是會在字段中存在一個值。但是,謝謝你的提示,我不知道 – 2011-05-30 13:23:02

+0

至少在一個標準的DB中,armitage寫的是不正確的,除了'total_field'的解釋,這是真的。 'NULL'傳播,即任何+ NULL都是NULL,並且具有NULL的數據SUM是NULL。但它沒有給出警告。這是預期的行爲。而且,如果答案是「ISNULL」,那麼正確的標準函數是「COALESCE」。提示:如果這些字段不能爲空,請確保在表定義中以這種方式聲明它們。 – 2011-05-30 17:49:14

+0

安德魯我想我不​​是很好地解釋自己。我試圖指出,你正確地做了什麼,以增加任何東西給Null。我只是想幫助原來的海報意識到他可能會在他的總結報告中得到意想不到的結果。謝謝澄清! – armitage 2011-05-31 12:50:19

0

你可以使用這樣的子查詢:

SELECT 
    total_field, 
    total_field + sum_anotherfield 
FROM (
    SELECT 
    SUM(table_one.field + table_two.field) AS total_field, 
    SUM(table_one.anotherfield) AS sum_anotherfield 
    FROM 
    table_one 
    JOIN 
    table_two ON table_one.id = table_two.id 
    WHERE 
    table_one.somefield = 1 
) x