본문 바로가기

TIL

[240131] SQL: 코드카타 118 & 파이썬: 코드카타 28

[SQL 코드카타]

585. Investments in 2016

https://leetcode.com/problems/investments-in-2016/

 

1) 어떤 문제가 있었나

① 2015년에 투자한 액수가 다른 유저 1명 이상과 같고, ② 위도경도는 다른 유저와 같지 않은, 유저/들의 2016년 투자금 합계 구하기 

 

2) 내가 시도해본 건 무엇인가

위도경도를 concat으로 합치고, cross join 하여 where 로 문제의 조건을 추출해보고자 했으나 실패

 

3) 어떻게 해결했나

tiv_2015와 위도경도를 각각 group by 하여 count한 값을 with 절로 빼고, 메인 쿼리에서 모두 조인 후 조건절 추가 

with tiv_2015 as (select tiv_2015, count(*) 2015_cnt
                  from Insurance
                  group by tiv_2015),
     location as (select concat(lat, '/', lon) location, count(*) lo_cnt
                  from Insurance
                  group by concat(lat, '/', lon))

select sum(tiv_2016) tiv_2016 
  from Insurance i
  inner join tiv_2015 using (tiv_2015)
  inner join location on concat(i.lat, '/', i.lon) = location
 where 2015_cnt > 1 and lo_cnt < 2


4) 무엇을 새롭게 알았나
- join의 on조건에도 함수 적용이 가능

- with절로 뺀 쿼리를 where 절 내 서브쿼리(haivng조건 포함)로 만드는 것도 가능했음


[파이썬 코드카타]

1) 어떤 문제가 있었나

0부터 9까지 중 일부가 들어 있는 정수에 배열 중, 없는 숫자의 합계 구하기 

 

2) 내가 시도해본 건 무엇인가

전체 값이 포함된 리스트에서 매개변수 리스트를 빼려고 했으나 실패

all_num - numbers (오류)

 

3) 어떻게 해결했나

for 문과 if 문을 활용해 없는 값을 더하도록 함 

def solution(numbers):
    all_num = list(range(0,10))
    answer = 0
    for num in all_num:
        if num not in numbers:
            answer += num
    return answer


4) 무엇을 새롭게 알았나

- 0~9 전체 더한 값에서, 매개변수 합을 빼는 것도 가능. ex. 45 - sum(numbers)