SQL 문제풀이 복습
문제 링크
간단한 window함수 활용 문제.
SELECT customer_name,
customer_id,
order_id,
order_date
FROM (SELECT c.name AS "customer_name",
o.customer_id,
o.order_id,
o.order_date,
Rank()
OVER(
partition BY customer_id
ORDER BY order_date DESC) AS "row_id"
FROM Orders o
JOIN Customers c
ON o.customer_id = c.customer_id) a
WHERE row_id <= 3
ORDER BY customer_name ASC,
customer_id ASC,
order_date DESC;
문제 링크
lower를 써서 product_name 컬럼을
모두 소문자로 변환해 준 후,
다시 trim 함수로 감싸서 앞뒤 공백을 모두 없애준다.
그냥 trim으로 쓰면 앞뒤 공백을 다 없애는 거고
왼쪽 공백만 없애고 싶으면 ltrim,
오른쪽 공백만 없애고 싶으면 rtrim 등으로 쓸 수 있다.
SELECT Trim(Lower(product_name)) AS "product_name",
Date_format(sale_date, '%Y-%m') AS "sale_date",
Count(*) AS "total"
FROM Sales
GROUP BY 1,
2
ORDER BY 1,
2;
문제 링크
이것도 위의 것과 똑같은 window함수 기초 활용 문제.
partition by와 order by를 잘 조합하는 것이 포인트.
SELECT product_name,
product_id,
order_id,
order_date
FROM (SELECT p.product_name,
o.product_id,
o.order_id,
o.order_date,
Rank()
OVER(
partition BY product_id
ORDER BY order_date DESC) AS "row_id"
FROM Orders o
JOIN Products p
ON o.product_id = p.product_id) a
WHERE row_id = 1
ORDER BY 1,
2,
3;