Почему этот запрос содержит ошибку в Oracle, но правильный в MySQL?

SELECT (select sum(total)
FROM   invoices) + sum(total)
FROM invoices;
0
Noe Miranda Franco 17 Окт 2014 в 01:27

3 ответа

Лучший ответ

Почему этот запрос имеет ошибку в Oracle, а в MySQL правильный

Потому что MySQL разрешает смешивать агрегированные и неагрегированные столбцы.

Чтобы процитировать документацию:

В стандартном SQL запрос, содержащий предложение GROUP BY, не может ссылаться на неагрегированные столбцы в списке выбора, имена которых не указаны в предложении GROUP BY.

[...]

MySQL расширяет использование GROUP BY, так что список выбора может ссылаться на неагрегированные столбцы, не названные в предложении GROUP BY.

[...]

это полезно в первую очередь, когда все значения в каждом неагрегированном столбце, не названном в GROUP BY, одинаковы для каждой группы. Сервер может выбрать любое значение из каждой группы, поэтому, если они не совпадают, выбранные значения являются неопределенными .

0
Sylvain Leroux 17 Окт 2014 в 01:38

(select sum(total) FROM invoices) - это выражение, это не агрегатная функция, и его не существует в GROUP BY (на самом деле вы не можете использовать подзапросы в GROUP BY)

Итак, вы пытаетесь смешать агрегатные и неагрегированные выражения вместе.

0
a_horse_with_no_name 17 Окт 2014 в 01:32

Если вы ищете рабочую версию в Oracle, вы можете:

select sum(total) + sum(total)
from invoices;
0
Martin Schapendonk 17 Окт 2014 в 17:00
1
Что было бы лучшим решением и в MySQL.
 – 
a_horse_with_no_name
17 Окт 2014 в 17:15