2010-08-04 177 views
1

我想根據max + sum條件選擇一些條目。select sum where sum

mytable 
---------- 
id | col1 | col2 

我要選擇具有COL1的總和所有條目& COL2大於或等於之和減去X的最大值(不要問我爲什麼:))

到目前爲止,我設法與和OK(以下簡稱別名爲 「總」):

SELECT id,SUM(col1 + col2) AS total FROM mytable GROUP BY id; 

我也設法得到的總和確定的MAX(用ORDER BY/LIMIT解決方法雖然):

SELECT id,SUM(col + col) as total FROM mytable GROUP BY id ORDER BY total DESC LIMIT 1; 

但每次我嘗試重新使用我的別名作爲條件(例如, WHERE總> = ...)我得到一個「未知列」錯誤

任何會如果使用GROUP BY,你需要使用having子句將不勝感激

+2

對於其他有類似問題的人,在選擇表達式之前先評估WHERE條款,以確定哪些行甚至應該打擾。事實上'HAVING'就像'WHERE'一樣,儘管速度可能會變慢,但如果你選擇的是你正在評估的東西,那麼它很有用。在這種情況下,您只需使用'HAVING total> = x'。 – Walf 2012-09-14 07:22:35

回答

6

您對SUM有一些誤解。 SUM是一個聚合函數,意味着它在許多記錄上工作,而不僅僅是一個。
要計算每個記錄的兩個字段的總和,您應該只使用+運算符。

SELECT id, col1+col2 AS 'total' 
FROM T1 
WHERE 
(col1+col2+x) >=(SELECT MAX(col1+col2) from T1) 
+0

的確誤解了SUM函數。 col + col1確實爲總數工作,但是我仍然在'where子句'錯誤中得到「未知列總數」。我嘗試過改變總數來測試(如果這個單詞被保留了,我嘗試了不同的語法,我還通過在> =之後放置了一個固定值來簡化where子句,沒有任何東西,我只是無法讓它工作。我可以幫你在這裏嗎? – Max 2010-08-04 16:13:15

+0

現在試試,這應該可以 – 2010-08-04 16:30:53

1

SELECT id,SUM(col1+col2) as total FROM mytable GROUP BY id ORDER BY total HAVING total >= x 
+0

-1條件是兩個字段摘要減去X的MAX,而不僅僅是X,以及爲什麼使用SUM ?!你將如何獲得整個表的MAX與一組?您必須使用內部查詢! – 2010-08-04 14:49:32