오늘은 sql 코드카타 1문제와 파이썬 머신러닝 학습한 것에 대해서 개인 과제를 시작했다.
과제는 마무리는 되었지만 한번 더 체크를 해보아야 할 것 같다.

오늘은 sql문제에서 배운 것을 정리해보자.

leetcode 585. Investment in 2016

작성 쿼리

# 문제 번역
-- tiv_2016다음과 같은 모든 보험 계약자에 대해 2016년의 모든 총 투자 가치 합계를 보고하는 솔루션을 작성하세요 .
-- tiv_2015한 명 이상의 다른 보험 계약자와 동일한 가치를 갖고 , **(첫 번째 조건)**
-- 다른 보험 계약자와 동일한 도시에 위치하지 않습니다(즉, ( lat, lon) 속성 쌍은 고유해야 합니다). **(두 번째 조건)**
-- 소수점 이하 두 자리 tiv_2016 로 반올림합니다 .
-- 결과 형식은 다음 예와 같습니다.

SELECT ROUND(sum(tiv_2016), 2) as tiv_2016
FROM insurance
where tiv_2015 in  (select tiv_2015
                    from insurance
                    group by tiv_2015
                    having count(tiv_2015) > 1)
and (lat, lon) in (select lat, lon from insurance group by lat, lon having count(*) = 1)

해설

처음 이 문제를 마주했을 때 데이터를 확인하고 조건이 무엇인가를 먼저 파악했다.
조건은 두 가지로 주어졌고, 각 조건을 따로 주어야겠다고 생각했다.
첫 번째 where절에서 tiv_2015에서 같은 값이 두 개 이상이여야 해당하는 조건이었다.
그래서, tiv_2015가 2개 이상인 조건을 in 을 활용하여 쿼리를 짰다.
두 번째 조건은 위도와 경도가 숫자데이터로 주어졌는데 위경도가 같은 데이터는 제외해야 했다.
이 조건에 마찬가지로 in 을 활용해서 lat, lon의 count가 1개 인 것만 뽑아서 중복이 있는 로우는 빠지도록 했다.
마지막으로 SELECT절에 tiv_2016을 합한 값을 소수점 두 번째 자리에서 반올림하였다.

  • 어려웠던 점
    -> 위경도가 같은 데이터를 제외해야 할 때, (lat, lon)을 묶어서 찾을 수 있도록 하는 방법을 생각하지 못한 점이 아쉬웠다. 단순했지만 떠오르지 않아서 솔루션 도움을 받아서 풀 수 있었다.
    그래도 문제의식은 제대로 하고 해결이 되지 않는 부분만 파악해서 보니 한눈에 해결방안을 파악할 수 있었다.
profile
Data analyst를 향해 도전하는 이야기

0개의 댓글