ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 231211 sql test 2차 시작
    패스트캠퍼스 부트캠프 학습일지 2023. 12. 11. 14:19
    
    -- 36.
    SELECT *
    FROM customer;
    # first_name, last_name
    
    SELECT *
    FROM rental;
    # >> customer_id, inventory_id
    
    SELECT *
    FROM inventory;
    # inventory_id >> film_id
    
    SELECT *
    FROM film_category;
    # film_id >> category_id
    
    SELECT *
    FROM category;
    # category_id, name
    
    SELECT DISTINCT c.customer_id, ca.name, COUNT(ca.name)
    FROM rental r
             JOIN customer c ON r.customer_id = c.customer_id
             JOIN inventory i ON r.inventory_id = i.inventory_id
             JOIN film_category fc ON i.film_id = fc.film_id
             JOIN category ca ON fc.category_id = ca.category_id
    GROUP BY c.customer_id, ca.name
    ORDER BY 1, 3 DESC;
    
    SELECT customer_id, name AS favorite_genre, genre_count
    FROM (SELECT c.customer_id,
                 ca.name,
                 COUNT(ca.name)                                                        AS genre_count,
                 RANK() OVER (PARTITION BY c.customer_id ORDER BY COUNT(ca.name) DESC) AS genre_rank
          FROM rental r
                   JOIN customer c ON r.customer_id = c.customer_id
                   JOIN inventory i ON r.inventory_id = i.inventory_id
                   JOIN film_category fc ON i.film_id = fc.film_id
                   JOIN category ca ON fc.category_id = ca.category_id
          GROUP BY c.customer_id, ca.name) AS ranked_genres
    WHERE genre_rank = 1
    ORDER BY customer_id;
    
    -- 37.
    SELECT *
    FROM rental;
    # rental_date, customer_id
    
    SELECT *
    FROM customer;
    # first_name, last_name
    
    SELECT DISTINCT CONCAT(first_name, ' ', last_name)
    FROM rental
             JOIN customer ON rental.customer_id = customer.customer_id
    WHERE rental_date NOT BETWEEN '2006-01-14' AND '2006-02-14'
    ORDER BY 1;
    
    -- 38.
    SELECT *
    FROM customer;
    
    SELECT CONCAT(first_name, ' ', last_name)           AS customer_name,
           title                                        AS movie_title,
           TIMESTAMPDIFF(DAY, rental_date, return_date) AS rental_duration,
           return_date
    FROM rental r
             JOIN customer c ON r.customer_id = c.customer_id
             JOIN inventory i ON r.inventory_id = i.inventory_id
             JOIN film f ON i.film_id = f.film_id
    ORDER BY return_date DESC
    LIMIT 10;
    
    -- 39.
    
    SELECT @total := SUM(payment.amount)
    FROM payment;
    
    SELECT p.staff_id, CONCAT(s.first_name, ' ', s.last_name), SUM(amount), (SUM(amount) / @total) * 100 AS ratio
    FROM payment p
             JOIN staff s ON p.staff_id = s.staff_id
    GROUP BY 1;
    
    SELECT *
    FROM staff;
    #first_name, last_name
    
    SELECT @total := SUM(payment.amount)
    FROM payment;
    
    -- 40.
    SELECT *
    FROM rental;
    # inventory_id, rental_id
    
    SELECT *
    FROM inventory;
    # inventory_id >> film_id;
    
    SELECT *
    FROM film_category;
    # film_id >> category_id
    
    SELECT *
    FROM category;
    # category_id, name
    
    SELECT @cus_id := customer_id, @cus_count := COUNT(DISTINCT i.film_id) AS unique_movies_borrowed
    FROM rental r
             JOIN inventory i ON r.inventory_id = i.inventory_id
             JOIN film_category fc ON fc.film_id = i.film_id
             JOIN category c ON fc.category_id = c.category_id
    GROUP BY customer_id
    ORDER BY 2 DESC
    LIMIT 1;
    
    
    
    SELECT @cus_count;
    
    SELECT customer_id, name AS favorite_genre, genre_count
    FROM (SELECT c.customer_id,
                 ca.name,
                 COUNT(ca.name)                                                        AS genre_count,
                 RANK() OVER (PARTITION BY c.customer_id ORDER BY COUNT(ca.name) DESC) AS genre_rank
          FROM rental r
                   JOIN customer c ON r.customer_id = c.customer_id
                   JOIN inventory i ON r.inventory_id = i.inventory_id
                   JOIN film_category fc ON i.film_id = fc.film_id
                   JOIN category ca ON fc.category_id = ca.category_id
          GROUP BY c.customer_id, ca.name) AS ranked_genres
    WHERE genre_rank = 1
    ORDER BY customer_id;

     

    40번이 겁나 어려운것이었다.. 이런건 엑셀로 하는게 속편할듯싶다.

    rank 함수에 대한 연구가 필요하다, union, except, intersect 역시 같이 공부해야겠다!

    '패스트캠퍼스 부트캠프 학습일지' 카테고리의 다른 글

    231227 태블로 시작  (0) 2023.12.29
    SQL프로젝트를 마치며  (1) 2023.12.27
    231208 sql코딩테스트 1차 종료!  (0) 2023.12.08
    231207 SQL계속(6)  (1) 2023.12.08
    231206 SQL 계속(5)  (1) 2023.12.08
Designed by Tistory.