585. Investments in 2016

오유찬·2026년 1월 14일

SQL

목록 보기
46/71

조건

  1. lat, lon 조합이 유일해야 한다.
  • 각각 lat, lon을 count로 2개 이상인지 체크
  • window function으로 (lat, lon)을 파티셔닝하고 count로 체크
  1. tiv_2015 값이 중복돼야 한다.
WITH cte as (
            SELECT  tiv_2016, 
                COUNT(*) OVER(PARTITION BY tiv_2015) as tiv_2015_cnt,
                COUNT(*) OVER(PARTITION BY lat, lon) as loc_cnt
            FROM    Insurance
            )

SELECT  ROUND(SUM(tiv_2016), 2) as tiv_2016
FROM    cte
WHERE   loc_cnt = 1 AND
        tiv_2015_cnt <> 1

파티셔닝하고 정렬을 다시 해야 하기 때문에 window function은 아무래도 좀 느리다.

lat, lon 조합을 사용하고 싶으면 CONCAT을 사용하는 방법도 존재한다.

WHERE CONCAT(lat, lon) in (
	SELECT	concat(lat, lon) as loc 
    FROM	Insurance
    GROUP BY
    		CONCAT(lat, lon)
    HAVING	COUNT(pid) = 1
    )

위도, 경도를 합쳐버려서 문자열로 만드는 방법은 다른 여러 문제에서 사용할 수 있는 좋은 테크닉일 것 같다.

profile
열심히 하면 재밌다

0개의 댓글