2012-06-23 116 views
1
的計算字段

這種查詢是給我的#1054的錯誤 - 在未知列'總金額「where子句」的錯誤選擇查詢

SELECT (amount1 + amount2) as totalamount 
FROM `Donation` 
WHERE totalamount > 1000 

我知道我可以通過使用GROUP BY子句解決此錯誤用條款替換我的where條件。但是除了使用子句之外還有其他解決方案。如果group by是唯一的解決方案,那麼我想知道爲什麼我必須使用group by子句,即使我沒有使用任何聚合函數

謝謝。

+1

重複總和'WHERE'子句。 – bfavaretto

+0

如果我有非常複雜的計算呢?這只是例如 –

+0

然後,我想你最好與團體和有... – bfavaretto

回答

3

我不會期望的MySQL,得到錯誤信息,但許多其他的數據庫做。在其他的數據庫,你可以解決它通過重複列定義:

SELECT amount1 + amount2 as totalamount 
FROM Donation 
WHERE amount1 + amount2 > 1000 

或者你可以使用子查詢,以避免repitition:

SELECT totalamount 
FROM (
     select amount1 + amount2 as totalamount 
     ,  * 
     from Donation 
     ) as SubQueryAlias 
WHERE totalamount > 1000 

Live example at SQL Fiddle.

1

沒辦法。

其中過濾列,而HAVING過濾聚合。

SQL Having

+0

那麼我說我知道如何通過使用條款來解決它。我想知道爲什麼我必須使用group by子句,即使我沒有使用任何聚合函數 –

+0

使用視圖... – vlain

+0

'create view Tot AS SELECT(amount1 + amount2)AS totalamount from Donation; select * from Tot where totalamount> 1000;' – vlain

1

根據不同的SQL方言你不能將派生列放在where子句中。

請使用此where子句。

WHERE (amount1 + amount2) > 1000 
+0

取決於方言?哪種方言允許這樣的事情? –

1

我建議你使用Andomar的答案中的變化之一。

什麼MySQL允許這是(不使用它,它不是標準的幾乎任何其他DBMS不允許它):

SELECT (amount1 + amount2) AS totalamount 
    FROM Donation 
    HAVING totalamount > 1000 ;