【问题标题】:Selected non-aggregate values must be part of the associated group. SELECT Command Failed选定的非聚合值必须是关联组的一部分。选择命令失败
【发布时间】:2020-10-23 17:08:43
【问题描述】:

我正在使用以下查询,它给出的错误是“选定的非聚合值必须是关联组的一部分。SELECT 命令失败。”

SELECT TOP 100 X_ISP_AFF_ADDR_SEQ, CAST(COUNT(*) AS BIGINT) AS COUNT_ROW FROM S_CONTACT WHERE X_ISP_AFF_ADDR_SEQ NOT LIKE '%[a-zA-Z]%';

我将上面的查询更改为如下所示,但错误仍然存​​在。

SELECT TOP 100 X_ISP_AFF_ADDR_SEQ, CAST(COUNT(X_ISP_AFF_ADDR_SEQ) AS BIGINT) AS COUNT_ROW FROM S_CONTACT WHERE X_ISP_AFF_ADDR_SEQ NOT LIKE '%[a-zA-Z]%';

【问题讨论】:

    标签: teradata


    【解决方案1】:

    您可能在这里缺少GROUP BY 子句:

    SELECT TOP 100
        X_ISP_AFF_ADDR_SEQ,
        CAST(COUNT(*) AS BIGINT) AS COUNT_ROW
    FROM S_CONTACT
    WHERE
        X_ISP_AFF_ADDR_SEQ NOT LIKE '%[a-zA-Z]%'
    GROUP BY
        X_ISP_AFF_ADDR_SEQ;
    

    您在原始查询中看到的确切错误与选择 X_ISP_AFF_ADDR_SEQ 指示 Teradata 为表中的每个 record 返回一个值有关,而 COUNT() 返回一个超过整个。 (通常)不可能在 select 子句中混合聚合和非聚合。

    【讨论】:

    • 那么第二次查询的原因是什么,我没有在那里使用任何其他属性。此外,我没有得到“选定的非聚合值必须是关联组的一部分。SELECT 命令失败。”意思是,你能简单解释一下吗,比如什么时候不能发生。
    • SELECT TOP 100 X_ISP_AFF_ADDR_SEQ, CAST(COUNT(X_ISP_AFF_ADDR_SEQ) AS BIGINT) AS COUNT_ROW FROM S_CONTACT WHERE X_ISP_AFF_ADDR_SEQ NOT LIKE '%[a-zA-Z]%';为什么这个查询会出现同样的错误?
    • 如上所述,没有GROUP BY 子句。您正在选择计数,这是一个表级聚合(即它涉及 all 记录)。您还选择了X_ISP_AFF_ADDR_SEQ,它对于每条记录都有不同的值。您希望 Teradata 选择哪个记录的值?这不清楚,因此您会收到错误。
    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 2021-12-17
    • 2015-10-05
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2018-07-15
    相关资源
    最近更新 更多