解决Oracle错误代码00979不是一个 GROUP BY 表达式(oracle 00979)

解决Oracle错误代码00979:不是一个 GROUP BY 表达式

在使用Oracle数据库时,经常会遇到错误代码00979的问题:不是一个GROUP BY表达式。这个错误通常出现在SELECT语句中,表示我们使用了不正确的GROUP BY表达式。本文将介绍如何解决这个问题并提供相关代码。

1.错误信息

当执行如下SELECT语句时,会出现00979错误代码:

SELECT column1, column2, SUM(column3)

FROM table

WHERE condition

GROUP BY column1

错误信息如下:

ORA-00979: 不是一个 GROUP BY 表达式

2.问题解析

错误代码00979通常表示我们使用了不正确的GROUP BY表达式,可以通过以下两种方式解决问题:

– 在SELECT语句中的列必须包含在GROUP BY表达式中

– 可以使用聚合函数来计算列,而不包含在GROUP BY中

下面分别介绍这两种解决方式。

2.1 在GROUP BY中包含所有列

在上面的SELECT语句中,我们选择了column1、column2和column3三列,但在GROUP BY表达式中只包含了column1一列,这是错误的。

正确的做法是将所有列都包含在GROUP BY表达式中:

SELECT column1, column2, SUM(column3)

FROM table

WHERE condition

GROUP BY column1, column2

这样就可以正常执行SELECT语句了,而且可以保证计算结果的正确性。

2.2 使用聚合函数计算列

另一种解决方式是使用聚合函数计算列,而不包含在GROUP BY表达式中。例如,我们可以使用SUM函数来计算column3列,而不用在GROUP BY表达式中包含它:

SELECT column1, column2, SUM(column3)

FROM table

WHERE condition

GROUP BY column1, column2

这样就可以正常执行SELECT语句了,而且使用SUM函数可以保证计算结果的正确性。

3.相关示例代码

为了更好地理解如何解决00979错误,下面给出一个示例代码:

— 创建表格

CREATE TABLE employees (

emp_id NUMBER(6) PRIMARY KEY,

emp_name VARCHAR2(30),

salary NUMBER(10, 2),

dept_id NUMBER(4)

);

— 插入数据

INSERT INTO employees VALUES (1, ‘Tony’, 10000, 10);

INSERT INTO employees VALUES (2, ‘Tom’, 20000, 20);

INSERT INTO employees VALUES (3, ‘John’, 30000, 10);

INSERT INTO employees VALUES (4, ‘Jerry’, 40000, 20);

INSERT INTO employees VALUES (5, ‘Susan’, 50000, 30);

— 会出现00979错误

SELECT dept_id, COUNT(emp_id), SUM(salary)

FROM employees

GROUP BY dept_id;

— 正确的写法

SELECT dept_id, COUNT(emp_id), SUM(salary)

FROM employees

GROUP BY dept_id;

— 使用聚合函数计算列

SELECT dept_id, COUNT(emp_id), SUM(salary)

FROM employees

GROUP BY dept_id;

4.总结

00979错误代码表示我们使用了不正确的GROUP BY表达式,需要在SELECT语句中的列包含在GROUP BY表达式中或使用聚合函数计算列。在实际开发过程中,我们应该仔细检查GROUP BY表达式以确保正确性,避免不必要的错误和麻烦。


数据运维技术 » 解决Oracle错误代码00979不是一个 GROUP BY 表达式(oracle 00979)