“列XYZ必须在GROUP BY” - >“不能GROUP BY聚合列”
我有下面的SQL语句(修剪)麻烦:“列XYZ必须在GROUP BY” - >“不能GROUP BY聚合列”
SELECT nr,
(CASE WHEN
SUM(vkdtab.amount*liter)<>0 AND
jjjjmm BETWEEN 201001 and 201009
THEN SUM(net)/SUM(vkdtab.amount*liter)
ELSE 0 END) as return
FROM tab
GROUP BY 1,2,3
应该给我量/升项目在一个特殊的时间范围内,但我得到的错误:column return must be in group by
在我添加该列后:cannot group by aggregate column
。
这是功能性的,只是没有时间表:
CASE WHEN
SUM(vkdtab.amount*liter)<>0
THEN SUM(net)/SUM(vkdtab.amount*liter)
ELSE 0 END
如何我可以添加的时间表没有得到一个错误?
我会尝试改变GROUP BY到GROUP BY nr, jjjjmm
所以与SELECT子句中的未聚合列匹配。你要么GROUP BY或SUM/MIN/COUNT等
如果这是错误的,那么该聚集是错误的,因为它会失败的“表达简单的英语你总”测试
GROUP BY ordinal
是卑鄙的概念也和应该被枪杀。
我以前的答案是不正确的 - 你不能用HAVING
在这种情况下
你只需要把在where子句中:
SELECT nr,
(CASE WHEN
SUM(vkdtab.amount*liter)<>0 AND
jjjjmm BETWEEN 201001 and 201009
THEN SUM(net)/SUM(vkdtab.amount*liter)
ELSE 0 END) as return
FROM tab
Where jjjjmm BETWEEN 201001 and 201009
And jjjjmm BETWEEN 201013 and 201020
GROUP BY CASE WHEN
SUM(vkdtab.amount*liter)<>0
THEN SUM(net)/SUM(vkdtab.amount*liter)
ELSE 0 END
如果我想要2个时间范围,该怎么办? – Sven 2010-09-09 12:50:33
@BeatMe - 我已经更新了我的回答 – codingbadger 2010-09-09 12:56:50
这个,它应该在哪里,在20113年和201009之间,还是在2010年和2010年之间? – Beth 2010-09-09 13:06:46
这是什么RDBMS?我以前没有看过“GROUP BY 1,2,3”的语法。 – 2010-09-09 12:44:30
@Martin Smith:MySQL显然允许它。 – gbn 2010-09-09 12:46:38
它只是我还是你正在查询一个不在你的查询中的表? vkdtab连接在哪里? – HLGEM 2010-09-09 13:26:21