Собесов

StrataScratch (Yelp) — Top Cool Votes: business с максимумом cool

SQLMAX по группе и связиЛёгкаяJunior

Условие

Таблица 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 — корректнее.

Подводные камни

  1. NULL в cool. MAX игнорирует NULL — норм. Но строка с cool = NULL не попадёт в результат, даже если она «лучший отзыв» — это правильно.
  2. Несколько максимумов. По условию StrataScratch — выходит несколько строк. Не редуцируйте до LIMIT 1.
  3. Дубли по (business_name, review_text). Если один отзыв задвоен — он два раза будет в выводе. Добавьте DISTINCT или используйте PK.

Эталонный ответ

WHERE cool = (SELECT MAX(cool) FROM yelp_reviews) — самый прямой вариант. На собесе можно показать RANK() OVER (ORDER BY cool DESC) = 1 как альтернативу.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти