Sql &引用;列XYZ必须按“分组”--&燃气轮机&引用;不能按聚合列“分组”;

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

我对以下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 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