如何在SWITCH语句中使用BETWEEN实现自定义GROUP BY范围分组
问题根因
你遇到的报错和SWITCH中BETWEEN的用法无关,是SQL语法的通用规则:所有出现在SELECT子句中、没有被聚合函数包裹的字段,必须完整出现在GROUP BY子句中。你当前GROUP BY的是SWITCH函数返回的分组标识,但SELECT里直接写了原始字段TheTmp,数据库无法确定分组内要返回哪一行的TheTmp值,因此抛出错误。
另外你原有的SWITCH写法存在参数顺序错误:SWITCH的参数规则是SWITCH(条件1, 返回值1, 条件2, 返回值2, ...),你写的SWITCH(TheTmp BETWEEN 0 AND 5,0,50,true)是把第二个条件和返回值写反了,不符合语法要求。
修正后的写法
你需要把SELECT子句的非聚合字段换成和GROUP BY完全一致的SWITCH表达式,同时修正SWITCH的参数顺序,如果你需要0-5区间合并为一组、大于5的数值单独分组,可使用如下SQL:
SELECT SWITCH(TheTmp BETWEEN 0 AND 5, '0-5区间', TRUE, TheTmp) AS 分组标识, SUM(TheTmp*0.33) AS 计算结果 FROM MyTable WHERE Name = 'TestName1' GROUP BY SWITCH(TheTmp BETWEEN 0 AND 5, '0-5区间', TRUE, TheTmp)
该语句运行结果完全匹配你的需求:
- 0-5区间行的计算结果为
(1 + 1.58938597048424) * 0.33 - 8.76669265399322行的计算结果为
8.76669265399322 * 0.33
如果你一定要用数字作为分组标识,把SWITCH里的'0-5区间'换成0即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者TourEiffel
相关产品推荐
相关产品推荐

