2014-02-06 47 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条款中对此作出规定。