Почему этот запрос содержит ошибку в Oracle, но правильный в MySQL?
SELECT (select sum(total)
FROM invoices) + sum(total)
FROM invoices;
3 ответа
Почему этот запрос имеет ошибку в Oracle, а в MySQL правильный
Потому что MySQL разрешает смешивать агрегированные и неагрегированные столбцы.
Чтобы процитировать документацию:
В стандартном SQL запрос, содержащий предложение GROUP BY, не может ссылаться на неагрегированные столбцы в списке выбора, имена которых не указаны в предложении GROUP BY.
[...]
MySQL расширяет использование GROUP BY, так что список выбора может ссылаться на неагрегированные столбцы, не названные в предложении GROUP BY.
[...]
это полезно в первую очередь, когда все значения в каждом неагрегированном столбце, не названном в GROUP BY, одинаковы для каждой группы. Сервер может выбрать любое значение из каждой группы, поэтому, если они не совпадают, выбранные значения являются неопределенными .
(select sum(total) FROM invoices)
- это выражение, это не агрегатная функция, и его не существует в GROUP BY (на самом деле вы не можете использовать подзапросы в GROUP BY)
Итак, вы пытаетесь смешать агрегатные и неагрегированные выражения вместе.
Если вы ищете рабочую версию в Oracle, вы можете:
select sum(total) + sum(total)
from invoices;
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.