2013-06-21 56 views
0

時無效使用組功能,我有以下查詢正在生成「無效使用組功能的」錯誤:MySQL查詢 - 使用CAST和SUM

SELECT dac_name, unit_name, ptn, unit_type, monthly_recurring, directory_charges 
FROM sprint WHERE date='$current_sprint_date' AND CAST(directory_charges AS DECIMAL(10, 2)) > SUM(CAST(directory_charges AS DECIMAL(10, 2)) * .01) ORDER BY CAST(directory_charges AS DECIMAL(10,2)) DESC LIMIT 10; 

似乎無法弄清楚。任何幫助是極大的讚賞。

+0

您正在嘗試總結過一個價值 - 你可能會想GROUP BY的東西,因爲在目前它不沒有道理。你究竟在做什麼? – sashkello

+0

我試圖返回directory_charges大於所有directory_charges之和的1%的行。 – codeman

+0

您不能在'WHERE'中使用聚合函數。嘗試在'HAVING'子句中使用它 –

回答

0

您不能在WHERE子句中使用像SUM()這樣的聚合函數。聚合取決於所選的行,因此在選擇行時使用它們是沒有意義的。您可以在HAVING條款,執行後的行已選定和處理的第二過濾器使用它:

SELECT dac_name, unit_name, ptn, unit_type, monthly_recurring, directory_charges 
FROM sprint 
WHERE date='$current_sprint_date' 
HAVING CAST(directory_charges AS DECIMAL(10, 2)) > SUM(CAST(directory_charges AS DECIMAL(10, 2)) * .01) 
ORDER BY CAST(directory_charges AS DECIMAL(10,2)) DESC 
LIMIT 10; 
+0

這不會再產生錯誤,謝謝。但是,它返回0行。也許我的數學是錯誤的... – codeman

+0

你可以用示例數據做一個sqlfiddle嗎? – Barmar

+0

大多數列的directory_charges爲空值,但具有值的值的樣本值爲'3.99','17 .05'等。如果我更改查詢並添加directory_charges!='',它現在只返回一個行,這是最高的數字。仍然錯過了其餘的。奇怪的。 – codeman