최대 1 분 소요

문제 링크

정답

# Write your MySQL query statement below
SELECT ROUND(SUM(tiv_2016), 2) tiv_2016
FROM (
    SELECT CASE
        WHEN COUNT(*) OVER (PARTITION BY tiv_2015) > 1 THEN tiv_2016
    END tiv_2016
    , pid
    FROM Insurance

    INTERSECT

    SELECT CASE
        WHEN COUNT(*) OVER (PARTITION BY lat, lon) = 1 THEN tiv_2016
    END tiv_2016
    , pid
    FROM Insurance
) t

✅ Point

  • 2가지 기준을 모두 충족시키는 행만 가져와야 함
    • 기준 1: tiv_2015 값이 2개 이상 존재
    • 기준 2: (lat, lon) 쌍이 유일할 것
  • 두 조건의 기준 column이 달라 한 번에 GROUP BY 때리는 거로는 불가능 -> INTERSECT 동시에 만족하는 방향으로 풀이 방향 설정
    • 기준 1 을 만족하는 pid와 기준 2를 만족하는 pid 값 교집합