SQL 문제풀이 복습
문제 링크
피벗테이블을 원래 형태로 되돌리는 문제.
이 문제와 쌍을 이루는 문제다.
정말 간단하고 무식하게 푼다면 이렇게도 할 수는 있다.
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;