leet code sql 585
링크 - https://leetcode.com/problems/investments-in-2016/description
문제
- tiv_2015 값이 최소 한개 이상 같아야 한다.
- 같은 위치(위도, 경도)에 존재하는 사람은 없어야 한다.
- 소수점 2자리까지 나타내어야한다.
문제 접근
- 위 조건을 만족하는 pid의 tiv_2016 총액 = group by
- 소수점 2자리까지 = decimal
- 각 조건에 대한 요청 사항을 subquery 혹은 join절로 구할 수 있다.
- 위 경우에는 group이 필요하기에 join 보다 subquery가 더 적절
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# subquery
with tiv_2015_data as (
select
tiv_2015
from Insurance
group by tiv_2015
having count(*) > 1
),
location as (
select
lat,
lon
from Insurance
group by lat,lon
having count(*) = 1
)
select
round(sum(tiv_2016), 2) tiv_2016
from Insurance a
join tiv_2015_data b
on a.tiv_2015 = b.tiv_2015
join location c
on a.lat = c.lat
and a.lon = c.lon
# join
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(*) > 1
)
AND (lat, lon) IN (
SELECT lat, lon
FROM Insurance
GROUP BY lat, lon
HAVING COUNT(*) = 1
)
having count(tiv_2015)>1