홍동이의 성장일기
[LeetCode] 585. Investments in 2016 본문
WITH cte_2015 AS
(
-- tiv_2015가 동일한 고객이 두 명 이상이어야함
SELECT tiv_2015
, count(*) as tot
FROM insurance
GROUP BY tiv_2015
HAVING tot >= 2
)
, cte_reg AS
(
-- 지역이 달라야함
SELECT lat, lon
, count(*) as reg
FROM insurance
GROUP BY lat, lon
HAVING reg = 1
)
SELECT ROUND(SUM(tiv_2016), 2) as tiv_2016
FROM insurance
WHERE tiv_2015 IN (select tiv_2015 from cte_2015)
AND (lat, lon) IN (select lat, lon from cte_reg)
💡 문제 풀이
문제에서 주어진 조건에 해당하는 테이블을 각각 만들어주었습니다.
조건 1) 하나 이상의 다른 보험 계약자와 동일한 tiv_2015 값을 갖습니다. ➡️ cte_2015
SELECT tiv_2015
, count(*) as tot
FROM insurance
GROUP BY tiv_2015
HAVING tot >= 2
조건 2) 다른 보험 계약자와 동일한 도시에 위치하지 않습니다(즉, (lat, lon) 속성 쌍은 고유해야 합니다). ➡️ cte_reg
SELECT lat, lon
, count(*) as reg
FROM insurance
GROUP BY lat, lon
HAVING reg = 1
마지막으로 다중행 서브쿼리를 사용하여 각각의 조건과 알맞는 tiv_2016만 가져올 수 있도록 해주었습니다.
조건에 부합하는 tiv_2016을 합하고 반올림까지 해주면 완성!
728x90
'Tool > SQL 코딩테스트 풀이' 카테고리의 다른 글
[LeetCode] 1164. Product Price at a Given Date (조건에 따라 다른 값 부여하기) (0) | 2023.12.20 |
---|---|
[LeetCode] 1158. Market Analysis I (JOIN에 AND 조건 사용하기) (0) | 2023.12.19 |
[LeetCode] 177. Nth Highest Salary (0) | 2023.12.11 |
[LeetCode] 176. Second Highest Salary (0) | 2023.12.10 |
[LeetCode] 626. Exchange Seats (0) | 2023.10.15 |
Comments