Sql &引用;列XYZ必须按“分组”--&燃气轮机&引用;不能按聚合列“分组”;
我对以下sql语句有问题(已修剪):Sql &引用;列XYZ必须按“分组”--&燃气轮机&引用;不能按聚合列“分组”;,sql,group-by,aggregate,sum,Sql,Group By,Aggregate,Sum,我对以下sql语句有问题(已修剪): 如何添加时间段而不出现错误?我以前的回答不正确-在这种情况下不能使用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 EN
如何添加时间段而不出现错误?我以前的回答不正确-在这种情况下不能使用
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
选择nr,
(如有)
总和(vkdtab.金额*升)0和
2011年至2009年期间的JJMM
然后求和(净额)/求和(vkdtab.金额*升)
否则0结束)作为返回
从选项卡
其中,JJMM在201001和201009之间
在201013年至201020年间
按情况分组
总和(vkdtab.金额*升)0
然后求和(净额)/求和(vkdtab.金额*升)
其他0结束
我会尝试将GROUP BY更改为GROUP BY nr,jjjjmm
,以便它与SELECT子句中的未聚合列相匹配。您可以按或总和/分钟/计数等分组
如果这是错误的,那么聚合是错误的,因为它将无法通过“用普通英语表达聚合”测试
groupbyordinal
也是一个卑鄙的概念,应该被枪毙。这是什么关系数据库管理系统?我以前没有见过语法GROUP BY 1,2,3
。@Martin Smith:MySQL显然允许它。是我还是你引用的表不在你的查询中?vkdtab的连接在哪里?嗯,应该是jjjjmm在201001和201009之间的位置,还是jjjjmm在201013和201020之间的位置?
CASE WHEN
SUM(vkdtab.amount*liter)<>0
THEN SUM(net)/SUM(vkdtab.amount*liter)
ELSE 0 END
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