홍동이의 성장일기

[LeetCode] 585. Investments in 2016 본문

Tool/SQL 코딩테스트 풀이

[LeetCode] 585. Investments in 2016

홍동2 2023. 12. 13. 14:29

 

Investments in 2016 - LeetCode

Can you solve this real interview question? Investments in 2016 - Table: Insurance +-------------+-------+ | Column Name | Type | +-------------+-------+ | pid | int | | tiv_2015 | float | | tiv_2016 | float | | lat | float | | lon | float | +-------------

leetcode.com

 

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
Comments