03/08 SQL 문제풀이 - 585. Investments in 2016 (Leetcode) ⭐⭐⭐

Data Architect / Engineer·2024년 3월 8일
1

1일_1SQL

목록 보기
49/63
post-thumbnail

문제

  • LeetCode SQL 문제
  • 585. Investments in 2016 / Medium
  • 문제 내용 : [링크]



내가 작성한 Query

with temp_01 as(
    select lat, lon
    from insurance
    group by lat, lon
    having count(*) = 1
),
temp_02 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 tiv_2015 in (select * from temp_02) and (lat, lon) in (select * from temp_01)
  • 문제에서 주어진 것처럼,
  1. tiv_2015가 한 명 이상의 policyholders와 같아야하고 (즉, unique 하지 않아야한다.)
  2. lat, lon이 다른 사람과 같으면 안 된다.(즉, unique 해야 한다.)
  • unique한 lat, lon 값을 구하기 위해 temp_01에서 lat, lon 기준 GROUP BY 해주고, 데이터 개수가 1개인 lat, lon을 구해준다. (count(*)=1lat, lon)

  • unique 하지 않은 tiv_2015를 구하기 위해 위에처럼 temp_02에서 tiv_2015기준 GROUP BY 해주고, 데이터 개수가 1개가 아닌 tiv_2015를 구해준다. (count(*) != 1tiv_2015)

  • 문제에서 구하기를 원하는 sum(tiv_2016)을 구해주되, WHERE 절 조건에서 tiv_2015temp_02의 데이터들에 해당하고, (lat, lon)이 temp_01의 데이터들에 해당해야 한다는 내용을 넣어준다.
    where tiv_2015 in (select * from temp_02) and (lat, lon) in (select * from temp_01)

  • round() 함수를 통해 sum(tiv_2016)을 소수 둘째자리까지 출력해준다.

profile
질문은 계속돼 아오에

0개의 댓글