tak's data blog
LeetCode 문제풀이 (626, 1158) 본문
#626
연속된 id 2개를 바꾸는 문제이다. 특이 조건으로 홀수행으로 끝나면 마지막 행은 그대로 둔다는 점이다.
SELECT (CASE
WHEN id % 2 != 0 and counts != id THEN id + 1
WHEN id % 2 != 0 and counts = id THEN id
ELSE id -1
END )AS id,
student
FROM Seat,
(SELECT count(*) as 'counts'
FROM Seat
) as s_count
order by id asc
처음 마지막 행 조건을 안두고 풀었을 땐 잘 풀렸는데 마지막 조건을 생각하느라 시간이 걸렸다.
서브쿼리로 따로 count 테이블을 만들어주고 id 갯수와 원래 테이블과의 마지막 id숫자가 같은지 다른지 조건을 주어 해결하였다.
#1158
SELECT u.user_id as 'buyer_id',
u.join_date,
COUNT(o.buyer_id) as 'orders_in_2019'
FROM Users u
LEFT JOIN Orders o
ON u.user_id = o.buyer_id and YEAR(o.order_date) ='2019'
GROUP BY u.user_id
처음 2019년이라는 조건 때문에 case when으로 풀려다가 그렇게 하게 된다면 전체 횟수를 세게 되어 오류가 발생하여 left join으로 해결하였다.
'SQL' 카테고리의 다른 글
LeetCode 문제풀이 (1795) (0) | 2022.07.04 |
---|---|
LeetCode 문제풀이 (1393, 1407, 1484, 1581) (1) | 2022.07.01 |
LeetCode 문제풀이 (262) (0) | 2022.06.26 |
LeetCode 문제풀이 (184, 185) (0) | 2022.06.26 |
LeetCode 문제풀이 (176, 178, 180, 181, 182, 183) (1) | 2022.06.24 |