下面是我在group by语句中使用聚合列时抛出错误的sql查询。请告知如何在MySQL中有效地完成它。
2
答案 0 :(得分:0)
您的问题并不清楚,但我可以看到您需要创建一个函数并将值sm.pace传递给它,这将使用大小写并返回适当的值。
答案 1 :(得分:0)
我猜你真的不想要avg()
。如果你想要每个类别一行,这可能是你想要的:
SELECT (CASE WHEN sm.pace < 0.30 THEN 'Ineligible'
WHEN sm.pace >= 0.30 AND sm.pace < 0.40 THEN 'Tier1'
WHEN sm.pace >= 0.40 AND sm.pace < 0.50 THEN 'Tier2'
WHEN sm.pace >= 0.50 AND sm.pace < 0.75 THEN 'Potential'
WHEN sm.pace > 0.75 THEN 'Inline'
END) AS Category,
ROUND(SUM(sm.balance_due), 2)
FROM SUMMARY sm
GROUP BY Category;
如果这是你想要的,你可以利用按顺序评估CASE
语句的事实来简化代码:
SELECT (CASE WHEN sm.pace < 0.30 THEN 'Ineligible'
WHEN sm.pace < 0.40 THEN 'Tier1'
WHEN sm.pace < 0.50 THEN 'Tier2'
WHEN sm.pace < 0.75 THEN 'Potential'
ELSE 'Inline'
END) AS Category,
ROUND(SUM(sm.balance_due), 2)
FROM SUMMARY sm
GROUP BY Category;
注意:这会将NULL
值合并到'Inline'
投票中,而不是将它们放入NULL
类别。