Я новичок в SQL и меня смущает разница в следующих двух запросах:
SELECT MAX (версия), * FROM table WHERE primary_key = @key GROUP BY location
ВЫБРАТЬ версию, * ИЗ таблицы WHERE primary_key = @key ГРУППА ПО местоположению HAVING version = MAX (version)
Предполагая, что таблица выглядит примерно так:
primary_key | version | location | data
Если я правильно понимаю, оба запроса выбирают запись максимальной версии в каждом месте (среди тех, у которых @key в качестве первичного ключа). Так есть ли разница между двумя запросами? Или разница только в производительности?
group by
он просто смотрит наcopies_in_stock
, сhaving
он ссылается наmax
(псевдонимMAX(copies_in_stock)
) .. Если бы он вместо этого использовалFROM writer WHERE MAX(copies_in_stock) > 5 GROUP BY poet;
, он получил бы тот же результат, как если бы предложениеhaving
использовалось в псевдониме агрегирования поcopies_in_stock
. - person dognose   schedule 27.06.2017