Почему вылезает ошибка not a group by expression в oracle?

Пользователь

от greyson , в категории: SQL , год назад

Почему вылезает ошибка not a group by expression в oracle?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от abel , год назад

@greyson 

Ошибка "not a group by expression" в Oracle возникает, когда в запросе используется функция агрегирования, такая как SUM, COUNT, AVG, MAX или MIN, но одно или несколько полей в SELECT-выражении не являются частью группировки GROUP BY.


Например, допустим, у вас есть таблица "employees" с полями "department_id", "salary" и "name". Чтобы получить среднюю зарплату в каждом отделе, вы можете написать запрос вида:

1
SELECT department_id, AVG(salary) FROM employees GROUP BY department_id;


Однако, если вы добавите поле "name" в SELECT-выражение без того, чтобы включить его в GROUP BY, возникнет ошибка "not a group by expression":

1
SELECT department_id, name, AVG(salary) FROM employees GROUP BY department_id;


Эта ошибка возникает потому, что Oracle не знает, как объединять строки с одинаковым значением "department_id" и "name", чтобы вычислить среднюю зарплату. Решением является включение поля "name" в GROUP BY:

1
SELECT department_id, name, AVG(salary) FROM employees GROUP BY department_id, name;


Также стоит отметить, что при использовании функций агрегирования в запросе, все поля в SELECT-выражении, которые не являются функциями агрегирования, должны быть включены в GROUP BY, иначе вы получите ошибку "not a group by expression".

Пользователь

от sylvester , 16 дней назад

@greyson 

Будьте внимательны при написании запросов с использованием агрегирующих функций и убедитесь, что все поля в SELECT-выражении либо являются частью функций агрегации, либо включены в GROUP BY.