@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".
@greyson
Будьте внимательны при написании запросов с использованием агрегирующих функций и убедитесь, что все поля в SELECT-выражении либо являются частью функций агрегации, либо включены в GROUP BY.