2014-02-06 81 views
0

是否有可能在某種情況下使用SUM的結果?我當前的查詢是這樣的:具有SUM功能的MySQL CASE

SELECT USERNAME, SUM(AMOUNT), 
CASE SUM(AMOUNT) 
WHEN SUM(AMOUNT) = 0.0 THEN 1 
WHEN SUM(AMOUNT) < 50.0 THEN 2 
WHEN SUM(AMOUNT) > 75.0 THEN 4 
END AS gid, 0 FROM payments GROUP BY USERNAME; 

這看起來好像沒什麼問題,但會產生這樣的:

審查13.00 NULL 0

它甚至有可能做到這一點?

回答

1

由於集合函數的限制,如Marc B's answer中提到的,另一種解決方案是首先獲取記錄,然後將聚合函數應用於所需字段。

SELECT 
    USERNAME, 
    SUM_AMOUNT, 
    CASE 
    WHEN SUM_AMOUNT = 0 THEN 1 
    WHEN SUM_AMOUNT < 50 THEN 2 
    WHEN SUM_AMOUNT > 75 THEN 4 
    END AS gid, 
    0 
FROM (
    SELECT USERNAME, SUM(AMOUNT) SUM_AMOUNT, 
    FROM payments 
    GROUP BY USERNAME 
) USER_AMOUNTS 
1

不可能像這樣 - 在整個結果集已知的情況下計算聚合函數,但在每行級別計算大小寫。

您需要在HAVING條款中對此作出規定。