241025_TIL

J Lee·2024년 10월 25일
0

아무리 사소하더라도 배움이 없는 날은 없다.

SQL 문제풀이 복습


Leetcode

문제 링크
피벗테이블을 원래 형태로 되돌리는 문제.
이 문제와 쌍을 이루는 문제다.

정말 간단하고 무식하게 푼다면 이렇게도 할 수는 있다.

SELECT product_id,
       store,
       price
FROM   (SELECT product_id,
               'store1' AS "store",
               store1   AS "price"
        FROM   Products
        UNION ALL
        SELECT product_id,
               'store2',
               store2
        FROM   Products
        UNION ALL
        SELECT product_id,
               'store3',
               store3
        FROM   Products) a
WHERE  price IS NOT NULL;

다만 이렇게 하면 product_id와 store의 갯수가 늘어나면
일일이 쿼리로 치기 어렵다는 문제가 있다.
이걸 어떻게 하면 해결할 수 있나?
(recursive 테이블을 어떻게 잘 만들면 방법이 있을 수 있을까?)

문제 링크
join만 하면 끝나는 문제.

SELECT p.session_id
FROM   Playback p
       LEFT JOIN Ads a
              ON p.customer_id = a.customer_id
                 AND a.timestamp BETWEEN p.start_time AND p.end_time
WHERE  a.ad_id IS NULL;

문제 링크
이것도 걍 기본적인 join 문제.

SELECT e1.name AS "Employee"
FROM   Employee e1
       JOIN Employee e2
         ON e1.managerId = e2.id
            AND e1.salary > e2.salary;

프로그래머스

문제 링크

SELECT CAR_TYPE,
       Count(*) AS "CARS"
FROM   CAR_RENTAL_COMPANY_CAR
WHERE  OPTIONS LIKE '%통풍시트%'
        OR OPTIONS LIKE '%열선시트%'
        OR OPTIONS LIKE '%가죽시트%'
GROUP  BY 1
ORDER  BY 1;

문제 링크

SELECT Round(Avg(DAILY_FEE)) AS "AVERAGE_FEE"
FROM   CAR_RENTAL_COMPANY_CAR
WHERE  CAR_TYPE = 'SUV';

문제 링크
난이도가 4라고 되어있는 것 치고는 그렇게까지 어렵진 않음.
2022년 1월을 기준으로 판매된 책을 먼저 구하고
그걸 나머지 테이블들과 join하고 저자와 카테고리별로 그루핑하면 끝.

SELECT b.AUTHOR_ID,
       AUTHOR_NAME,
       CATEGORY,
       Sum(PRICE * total_sales) AS "TOTAL_SALES"
FROM   BOOK b
       JOIN AUTHOR a
         ON b.AUTHOR_ID = a.AUTHOR_ID
       JOIN (SELECT BOOK_ID,
                    Sum(SALES) AS "total_sales"
             FROM   BOOK_SALES
             WHERE  Date_format(SALES_DATE, '%Y-%m') = '2022-01'
             GROUP  BY 1) a
         ON b.BOOK_ID = a.BOOK_ID
GROUP  BY 1,
          2,
          3
ORDER  BY 1 ASC,
          3 DESC;

문제 링크

SELECT category,
       Sum(sales) AS "TOTAL_SALES"
FROM   BOOK_SALES bs
       JOIN BOOK b
         ON bs.BOOK_ID = b.BOOK_ID
WHERE  Date_format(SALES_DATE, '%Y-%m') = '2022-01'
GROUP  BY 1
ORDER  BY 1;

문제 링크

SELECT b.BOOK_ID,
       AUTHOR_NAME,
       Date_format(PUBLISHED_DATE, '%Y-%m-%d') AS "PUBLISHED_DATE"
FROM   BOOK b
       JOIN AUTHOR a
         ON b.AUTHOR_ID = a.AUTHOR_ID
WHERE  CATEGORY = '경제'
ORDER  BY 3;
profile
기본기를 소홀히 하지 말자

0개의 댓글

관련 채용 정보