【问题标题】:Aggregation with Group by与 Group by 聚合
【发布时间】:2014-11-22 13:02:36
【问题描述】:

我有如下sql语句:

SELECT MODEL, COLOR, SUM(SALES)
FROM SALES
WHERE MODEL='chevy'
GROUP BY MODEL; 

当我运行此语句时,我收到一条错误消息,提示““sales.color”必须出现在 GROUP BY 子句中或用于聚合函数中”

我不明白为什么 COLOR 必须出现在 Group by 或用于聚合函数中。

谢谢。

【问题讨论】:

    标签: sql


    【解决方案1】:
    SELECT MODEL, COLOR, SUM(SALES)
    FROM SALES
    WHERE MODEL='chevy'
    GROUP BY MODEL,COLOR; 
    

    SQL Server: Difference between PARTITION BY and GROUP BY

    【讨论】:

    • 这并不能解释为什么
    • @JamesBinford 我添加了链接
    【解决方案2】:

    颜色必须出现在分组依据中,因为您正在进行聚合选择。本质上,这里的问题是它不知道要汇总销售额的行。您正在选择每个模型的销售额总和以及每个模型的颜色,因此如果您想知道每个模型的销售额而不考虑颜色,则需要从选定列中删除颜色,或者将颜色添加到组中如果您想知道每种型号的每种颜色的销量。

    第一种情况:

    SELECT MODEL, SUM(SALES)
    FROM SALES
    WHERE MODEL='chevy'
    GROUP BY MODEL; 
    

    第二种情况:

    SELECT MODEL, COLOR, SUM(SALES)
    FROM SALES
    WHERE MODEL='chevy'
    GROUP BY MODEL,COLOR; 
    

    【讨论】:

    【解决方案3】:

    用途:

    GROUP BY MODEL,COLOR
    

    由于您在查询中要求 MODEL 和 COLOR 字段并基于这两个字段在 SALES 上应用聚合,因此您必须使用这两个字段对聚合进行 GROUP

    【讨论】:

      【解决方案4】:

      这是 Groupby 的规则:

      规则 1:如果一个选择块确实有一个 GROUP BY 子句,任何 SELECT 子句中指定的列规范必须独占 作为聚合函数的参数或在列表中出现 GROUP BY 子句中给出的列,或两者中的列。

      这里还有更多:http://www.informit.com/articles/article.aspx?p=664143&seqNum=6

      【讨论】:

        猜你喜欢
        • 2021-02-03
        • 2021-02-25
        • 1970-01-01
        • 2014-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-24
        相关资源
        最近更新 更多