Самые желанные игры
Список желаний работает, и первый вопрос магазина: какие игры покупатели хотят больше всего? Ответ поможет выбрать игры для следующей распродажи и покажет, насколько велик интерес к Robot Rebellion и Mystery Manor ещё до их выхода.
Это вопрос для GROUP BY: одна группа на каждую игру, а COUNT(*) считает строки в ней, то есть сколько покупателей держат игру в списке желаний. В списке желаний только ID, поэтому соедините его с games, чтобы получить названия, и сгруппируйте по игре: GROUP BY g.id, g.title.
У нескольких игр будет одинаковое число желаний. Чтобы порядок был однозначным, сортируйте сначала по числу, а затем по названию. В ORDER BY можно использовать псевдоним столбца, например ORDER BY wishes DESC.
Подсчёт, который пропускает игры, которых никто не хочет, рассказывает лишь полправды. Чтобы сохранить и эти игры, начните с games и используйте LEFT JOIN: игра без желаний тогда получит одну строку с NULL в столбцах списка желаний.
Типичная ошибка: COUNT(*) вместе с LEFT JOIN. У игры без желаний всё равно есть эта одна строка, поэтому COUNT(*) даёт 1. Считайте вместо этого столбец присоединённой таблицы: COUNT(столбец) пропускает NULL и даёт 0. Вот разница на примере числа заказов каждого покупателя:
SELECT c.name, COUNT(*) AS wrong, COUNT(o.id) AS order_count
FROM customers AS c
LEFT JOIN orders AS o ON o.customer_id = c.id
GROUP BY c.id, c.name
ORDER BY order_count, c.name
LIMIT 3;| name | wrong | order_count |
|---|---|---|
| Henry Scott | 1 | 0 |
| Max Baker | 1 | 0 |
| Isla Young | 1 | 1 |
Henry Scott и Max Baker ни разу не заказывали, но COUNT(*) насчитывает им по одному заказу.
Задание
- 1
Под комментарием
-- 3. Самые желанные игрыпокажите, сколько покупателей держат каждую игру в списке желаний: столбцыtitleиwishes, отсортированные от самой желанной игры, а игры с одинаковым числом — по названию. Первые строки:title wishes Knight's Oath 3 Robot Rebellion 3 Dragon Forge 2 Goal Rush 2 Mystery Manor 2 … … - 2
Измените запрос так, чтобы он показывал все 20 игр, а для игр, которых никто не добавил в список желаний, — 0. После Zombie Town, последней игры с одним желанием, результат продолжается так:
title wishes … … Zombie Town 1 Bakery Story 0 Castle Siege 0 … …