我继承了需要修改的查询。查询似乎是标准的'选择field1,来自TABLE_A的field2,其中blah,blah,blah ....'
然后它将以下语句作为查询的一部分:
xAxis: {
labels: {
step: 5 // number to skip
}
},
我无法理解SUM(CASE)语句正在做什么。它们似乎是多余的,但这是一个已被使用了一段时间的查询。有人可以对这些陈述的完成情况有所了解吗?谢谢。
答案 0 :(得分:0)
我认为目标是采用不是所有行都只包含A,B,C或D的分组行(并排除空值)
您可以像我想的那样简化查询:
HAVING count(S.LVLP1)<> SUM(CASE WHEN S.LVLP1 NOT IN('A','B','C','D') THEN 1 ELSE 0 END)
答案 1 :(得分:0)
SUM(CASE
WHEN S.LVLP1 NOT IN ('A','B','C','D') THEN 1
ELSE 0 END)
计算组中S.LVLP1
不是'A','B','C','D'之一的行数。
SUM(CASE
WHEN S.LVLP1 IN('A','B','C','D') THEN 1
ELSE 0 END)
计算S.LVLP1
,'B','C','D'之一的组中的行数。
¬= SUM(CASE
WHEN S.LVLP1 NOT IN('A','B','C','D') THEN 1
ELSE 0 END))
将“非A,B,C,D行”和“A,B,C,D行”的总和与“非A,B,C,D行”的总和进行比较 - 结果将如果有一些“A,B,C,D行”,则所有数字都是非负数。
此
AND SUM(CASE
WHEN S.LVLP1 IN('A','B','C','D') THEN 1
ELSE 0 END) > 0
如果存在“A,B,C,D行”,则也是如此。看起来这两个条件试图做同样的事情,因此一个是多余的。
总体而言,条件等同于此相关子查询
HAVING EXISTS (
SELECT 1 FROM yourtable T
WHERE T.LVLP1 IN('A','B','C','D')
AND (your grouping columns in T) = (grouping columns from the outer select S)
)