1일 1쿼리 - 11

-- 문제 1 : 2006년에 가장 많은 영화를 대여한 고객의 이름과 대여한 영화 수를 구하세요.
SELECT 
    c.first_name,
    c.last_name,
    COUNT(r.rental_id) AS rental_count
FROM
    rental r
        JOIN
    customer c ON r.customer_id = c.customer_id
WHERE
    YEAR(r.rental_date) = '2006'
GROUP BY r.customer_id
ORDER BY rental_count DESC
LIMIT 1;

-- 문제 2 : 각 영화 카테고리별로 평균 대여 횟수를 계산하여 출력하세요.
SELECT 
    c.name, AVG(rental_count) AS avg_rental_count
FROM
    (SELECT 
        i.film_id, COUNT(r.rental_id) AS rental_count
    FROM
        rental r
    JOIN inventory i ON r.inventory_id = i.inventory_id
    GROUP BY i.film_id) AS film_rental_count
        JOIN
    film_category fc ON film_rental_count.film_id = fc.film_id
        JOIN
    category c ON c.category_id = fc.category_id
GROUP BY c.name;

-- 문제 3 : 지난 달에 가장 많이 대여된 영화의 제목과 대여 횟수를 구하세요.
SELECT 
    f.title, COUNT(r.rental_id) AS rental_count
FROM
    rental r
        JOIN
    inventory i ON r.inventory_id = i.inventory_id
        JOIN
    film f ON i.film_id = f.film_id
WHERE
    r.rental_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AND CURDATE()
GROUP BY f.film_id
ORDER BY rental_count DESC
LIMIT 1;

-- 문제 4 : 각 직원이 처리한 대여 건수의 총합과 그 직원의 이름을 출력하세요.
SELECT 
    s.first_name,
    s.last_name,
    COUNT(r.rental_id) AS total_rentals
FROM
    rental r
        JOIN
    staff s ON r.staff_id = s.staff_id
GROUP BY s.staff_id
ORDER BY total_rentals DESC;

-- 문제 5 : 2005년 3월부터 8월까지의 각 월별로 대여된 영화 수를 출력하세요.
SELECT 
    DATE_FORMAT(r.rental_date, '%Y-%m') AS month,
    COUNT(r.rental_id) AS rental_count
FROM
    rental r
WHERE
    r.rental_date BETWEEN '2005-03-01' AND '2005-08-31'
GROUP BY month
ORDER BY month;

'MySQL > 1일 1쿼리' 카테고리의 다른 글

1일 1쿼리 - 13  (0) 2024.07.16
1일 1쿼리 - 12  (0) 2024.07.15
1일 1쿼리 - 10  (0) 2024.07.11
1일 1쿼리 - 9  (0) 2024.07.10
1일 1쿼리 - 8  (0) 2024.07.09