Условие
Таблица yelp_reviews(business_name, review_text, cool). Найдите business_name и review_text отзыва (отзывов?) с максимальным количеством cool-голосов.
Решение
Подход с подзапросом
SELECT business_name, review_text
FROM yelp_reviews
WHERE cool = (SELECT MAX(cool) FROM yelp_reviews);Если максимум cool у нескольких отзывов — все они попадут в выход (что обычно ожидаемо).
Подход с RANK()
SELECT business_name, review_text
FROM (
SELECT business_name, review_text, cool,
RANK() OVER (ORDER BY cool DESC) AS rnk
FROM yelp_reviews
) t
WHERE rnk = 1;Оба варианта эквивалентны по результату, но RANK нагляднее показывает «топ-1 со связями».
ORDER BY cool DESC LIMIT 1 — НЕ безопасно
Если максимум встречается несколько раз — LIMIT 1 оставит случайную строку. Подзапрос с MAX или RANK = 1 — корректнее.
Подводные камни
- NULL в
cool.MAXигнорирует NULL — норм. Но строка сcool = NULLне попадёт в результат, даже если она «лучший отзыв» — это правильно. - Несколько максимумов. По условию StrataScratch — выходит несколько строк. Не редуцируйте до
LIMIT 1. - Дубли по
(business_name, review_text). Если один отзыв задвоен — он два раза будет в выводе. Добавьте DISTINCT или используйте PK.
Эталонный ответ
WHERE cool = (SELECT MAX(cool) FROM yelp_reviews) — самый прямой вариант. На собесе можно показать RANK() OVER (ORDER BY cool DESC) = 1 как альтернативу.