具有SUM功能的MySQL CASE

时间:2014-02-06 18:03:38

标签: mysql case

是否可以在案例中使用SUM的结果?我目前的查询是这样的:

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

甚至可以这样做吗?

2 个答案:

答案 0 :(得分:1)

不可能这样 - 在整个结果集已知之后计算聚合函数,但是在每行级别评估案例。

您需要在HAVING子句中使用此功能。

答案 1 :(得分: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