KVA wrote: ↑02 May 2019 18:24
А почему это вообще выполняется? Вроде как синтаксис неверен и вообще не должно выполнятся. MS SQL ругается например
Почему неверен? Неужели Вас смущают запросы типа
Code: Select all
SELECT 'Дятлы' label, COUNT (1) cnt
FROM birds
WHERE family = 'Woodpecker'
UNION ALL
SELECT 'Вороны' label, COUNT (1) cnt
FROM birds
WHERE family = 'Crow'
Стандартное правило - аггрегационный запрос требует, чтобы все колонки по которым происходит группировака были в спике group by. В данном случае список группировки пустой, значит происходит аггрегация всех записей после наложения фильтра и к результату прилепляется константа. Запрос возвращает две записи (дятлы и вороны) + посчитаное количество отфильтрованых записей для каждого поздапроса.
Если взять реальную колонку из таблицы вместо константы "Дятлы", то получите сообщение об ошибке что отсутсвует GROUP BY по этой колонке.
Если добавить дятлов в group by, то в зависимости от наличия отфильтрованых записей получите либо количество, либо пустой ответ.