【问题标题】:Selected non-aggregate values must be part of the associated group选定的非聚合值必须是关联组的一部分
【发布时间】:2013-06-27 01:31:21
【问题描述】:

我在 Teradata 中有两个表:Table_A 和 Table_B。它们之间是左连接。之后我正在制作包含两个表中的属性的 SELECT 语句:

SELECT
attribute_1
attribute_2
...
attribute_N

后记,我正在使用 SUM 函数进行某些计算。这些函数看起来像这样:

SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End

(在此示例中使用了选择部分中的属性)。

但我也在 CASE 部分中使用了不在 select 语句中的属性 - 类似这样:

SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End

当然最后我在做 GROUP BY 1,2,...,N

我得到的错误是“选定的非聚合值必须是关联组的一部分。” 此外,我检查了 SELECT 部分中选定属性的十亿次,它是 N。 问题是 - 为什么我会收到这个错误?是不是因为我在 SUM 部分中使用了,即 CASE 部分属性(attribute_X 和 attribute_Y),它们不包含在 SELECT 部分中?

结束语句的蓝图看起来……像这样:

INSERT INTO table_new

SELECT
attribute_1,
attribute_2,
...
attribute_N,

SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End
) as sum_a,

SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End
) as sum_X

FROM table_a LEFT JOIN table_B
ON ...

GROUP BY 1,2,...,N

【问题讨论】:

    标签: sql group-by case teradata


    【解决方案1】:

    错误消息表明您没有在GROUP BY 表达式中包含SELECT 语句中列出的所有非聚合列。我猜你列出的列比“占位符”多。

    避免这种情况的最佳方法是显式命名所有列而不使用“相对定位”语法。换句话说,而不是使用GROUP BY 1,2,...N 使用:

    GROUP BY
       attribute_1,
       attribute_2,
       ...
       attribute_N
    

    如果这不能解决您的问题,请修改您的问题并显示一个不起作用的完整查询。

    【讨论】:

    • 我按照你的描述做了 - 我仍然收到同样的信息。我的假设是,即使是在 CASE 部分中使用的那些属性(即 SUM 部分 - 聚合函数)也必须包含在 SELECT 部分中。这意味着它们必须包含在 GROUP BY 部分中(即使我不需要它们)。这应该意味着我必须执行另一个 SELECT 和另一个 SUM 才能获得我需要的准确数据。
    • 我发现了错误 - SUM 部分由更多子部分组成。例如“金额 - SUM(...) + SUM(...)”。我必须在“金额”部分中包含属性。
    【解决方案2】:

    我发现了错误 - SUM 部分由更多子部分组成。例如“金额 - SUM(...) + SUM(...)”。我必须在“金额”部分包含属性。

    【讨论】:

      猜你喜欢
      • 2021-12-17
      • 1970-01-01
      • 2020-10-23
      • 2018-10-18
      • 2015-10-05
      • 2020-05-14
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多