Зачем тут нужен подзапрос?

Рейтинг: 3Ответов: 1Опубликовано: 23.02.2015
SELECT * FROM Customers WHERE rating = (SELECT MAX(rating) FROM Customers);

Я думал, раз мы ищем из этой таблицы максимальное значение, то можно просто

rating = MAX(rating)

Ответы

▲ 6Принят

Мы ищем не просто "максимальное значение", а все записи с максимальным рейтингом. Для этого нам нужно получить значение этого самого максимального рейтинга. И выбрать все записи, у которых рейтинг совпадает с максимальным.

Что касается "просто rating=MAX(rating)" - а какую группировку используем для агрегации? Что нужно - записи с максимальным рейтингом среди всех клиентов или с максимальным рейтингом среди клиентов одного региона? И так далее, и тому подобное. Использование агригирующих функций в одном запросе с другими полями требует описания группировки. Поэтому такие вещи выносятся в подзапрос.