[LeetCode-SQL 50] 585. Investments in 2016

코린이·2025년 6월 28일

SQL 문제 풀이 (MySQL)

목록 보기
88/96

❓ 문제

Insurance
+-------------+-------+
| Column Name | Type  |
+-------------+-------+
| pid         | int   |
| tiv_2015    | float |
| tiv_2016    | float |
| lat         | float |
| lon         | float |
+-------------+-------+

pid는 이 테이블의 기본 키(고유 값을 가진 열)입니다.
이 테이블의 각 행에는 하나의 정책에 대한 정보가 포함됩니다.
pid는 보험 소유자의 정책 ID입니다.
tiv_2015는 2015년의 총 투자 가치이고 tiv_2016은 2016년의 총 투자 가치입니다.
lat은 보험 소유자의 도시가 위치한 위도입니다. lon은 정책 소유자 도시의 경도입니다. 경도 값이 NULL이 아닌 것이 보장됩니다.

모든 보험 계약자의 2016년 총 투자 가치의 합계를 보고하는 솔루션을 작성하시오:

하나 이상의 다른 보험 계약자와 동일한 tiv_2015 값을 가지며
다른 보험 계약자와 같은 도시에 위치하지 않습니다(즉, (lat, lon) 속성 쌍은 고유해야 함).
tiv_2016을 소수점 이하 두 자리로 반올림합니다.

자세한 문제 내용은 사이트 참고...


❗️ 문제 풀이

-- 위도/경도 고유 값
with tmp_tb1 as (
    select
        lat
        , lon
    from Insurance
    where 1=1
    group by lat, lon
    having count(*) = 1
), 
-- tiv_2015 값 중복
tmp_tb2 as (
    select 
        tiv_2015
    from Insurance
    group by tiv_2015
    having count(*) > 1
)
select 
	round(sum(tiv_2016), 2) as tiv_2016
from Insurance
where 1=1
    and (lat, lon) in (select * from tmp_tb1)       -- 위도/경도는 고유값만
    and tiv_2015 in (select tiv_2015 from tmp_tb2)  -- tiv_2015는 중복만
;

🔗 Reference

https://leetcode.com/problems/investments-in-2016/description/?envType=study-plan-v2&envId=top-sql-50

0개의 댓글