首页 > 解决方案 > SELECT 列表不在 GROUP BY 错误中,但我得到了明确的结果

问题描述

这是我制作的代码。

SELECT
    substr(to_char(birthday, 'YYYY'), 1, 3)
    || '0',
    emp_type,
    AVG(pay)
FROM
emp2
WHERE
    substr(to_char(birthday, 'YYYY'), 1, 3) IN (
        '196',
        '197',
        '198',
        '199'
    )
GROUP BY
    substr(to_char(birthday, 'YYYY'), 1, 3),
    emp_type;

代码很简单,只需按 1960 年代、1970 年代、1980 年代、1990 年代分组,然后使用AVG(PAY)

运行此代码时没有问题或警告,但 Oracle SQL Devloper 向我显示了这一点。 警告牌

对不起我的语言。无论如何,警告说 SELECT 列表与 GROUP BY 不同。

我知道这是一件小事,但我认为我选择的那个肯定是在 GROUP BY 中。请告诉我我的想法是对还是错。这是此代码中使用的结果和数据表。

结果 在此处输入图像描述

标签: sqloraclegroup-byoracle-sqldeveloper

解决方案


您的分组依据需要包含您选择的列。在您的情况下,您选择了 2 列:

SELECT 
    substr(to_char(birthday, 'YYYY'), 1, 3) || '0',
    emp_type,
    ...

但是您错过了 group by 子句中连接的“0”,因此您的 2 列与您的子句中的列group by不同select

GROUP BY
    substr(to_char(birthday, 'YYYY'), 1, 3),
    emp_type;

尝试将其更改为

GROUP BY
    substr(to_char(birthday, 'YYYY'), 1, 3) || '0',
    emp_type;

推荐阅读