SQL Как узнать, какой клиент арендовал больше всего фильмов? - PullRequest
0 голосов
/ 21 марта 2020

Я бьюсь над вопросом, который сказал: «Какой клиент арендовал больше всего фильмов?»

Я делаю это, используя пример базы данных Seikila в MySQL. У меня есть кое-что, что объединяет мои таблицы и пытается подсчитать, но я знаю, что это неправильно, просто просматривая фактические данные в таблице аренды. мой код такой, как показано ниже

SELECT r.rental_id, cust.customer_id, count(*) as Total_Rentals
FROM rental as r
INNER JOIN customer AS cust on r.customer_id = cust.customer_id
GROUP BY cust.customer_id;

, но он говорит мне, например, что клиент 1 арендовал 32 фильма, что, я знаю, неправильно. Что я делаю неправильно? так как меня попросили дать разъяснения, база данных, которую я использую: https://dev.mysql.com/doc/sakila/en/

И я пытаюсь выяснить, какой клиент арендовал больше всего фильмов, я не совсем уверен, что мой скрипт на самом деле возвращается.

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Удалите столбец rental_id из списка выбора и отсортируйте результат по count(*) по убыванию, чтобы получить верхнюю строку 1:

SELECT cust.customer_id, cust.name, count(*) as Total_Rentals
FROM rental as r
INNER JOIN customer AS cust on r.customer_id = cust.customer_id
GROUP BY cust.customer_id, cust.name
ORDER BY Total_Rentals DESC LIMIT 1

Но если вам нужен только идентификатор клиента, тогда нет нужно для объединения:

SELECT customer_id, count(*) as Total_Rentals
FROM rental
GROUP BY customer_id
ORDER BY Total_Rentals DESC LIMIT 1
0 голосов
/ 21 марта 2020

Вам нужно join customer и rental, group by customer id (без rental id) и сосчитать его:

SELECT cust.customer_id, count(*) as Total_Rentals
FROM rental as r
INNER JOIN customer AS cust on r.customer_id = cust.customer_id
GROUP BY cust.customer_id;

Таким образом, этот код должен работать. Если это не работает, это, вероятно, означает, что у вас есть дубликаты или другие нетрадиционные проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...