주어진 Insurance 테이블에는 보험 가입자의 투자 정보가 담겨 있으며, 목표는 다음 두 조건을 만족하는 보험 가입자들의 tiv_2016 값의 합계를 구하는 것입니다.
tiv_2015 값이 다른 가입자와 동일한 경우 (즉, 같은 tiv_2015 값을 가진 가입자가 하나 이상 존재).lat, lon 조합)가 다른 가입자와 중복되지 않는 경우 (즉, 해당 위치가 유일한 경우).이 두 조건을 만족하는 레코드들의 tiv_2016 값을 소수점 둘째 자리까지 반올림하여 반환합니다.

조건 1: tiv_2015 값이 두 번 이상 등장하는 경우를 찾습니다.
GROUP BY tiv_2015와 HAVING COUNT(*) > 1을 사용하여 이러한 값들을 필터링합니다.조건 2: 위치(lat, lon)가 고유한 경우를 찾습니다.
GROUP BY lat, lon과 HAVING COUNT(*) = 1을 사용하여 이러한 위치들을 찾습니다.최종 조합: 두 조건을 WHERE 절에 AND 연산자로 결합하여 최종 필터링을 수행합니다.
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
);
서브쿼리 1 - tiv_2015 조건:
SELECT tiv_2015 FROM Insurance GROUP BY tiv_2015 HAVING COUNT(*) > 1tiv_2015 값이 하나 이상 다른 가입자와 동일한 경우를 찾습니다.서브쿼리 2 - 위치 조건:
SELECT lat, lon FROM Insurance GROUP BY lat, lon HAVING COUNT(*) = 1(lat, lon)이 유일한 가입자들을 찾습니다.최종 WHERE 절:
AND로 결합하여, tiv_2015가 중복되며 (lat, lon) 조합이 고유한 가입자들을 필터링합니다.SUM과 ROUND 사용:
tiv_2016 값을 합산(SUM())하고 소수점 둘째 자리까지 반올림(ROUND())하여 결과를 반환합니다.GROUP BY는 데이터를 특정 열을 기준으로 그룹화하고, HAVING 절은 이 그룹화된 데이터에 대한 조건을 지정하여 필터링합니다.IN 절과 서브쿼리를 결합하여 복잡한 조건을 구현합니다.lat, lon): 두 개의 열을 조합하여 고유한 위치를 찾고, 이러한 위치가 고유한지를 확인하는 것이 중요합니다.이 논리를 통해 문제의 요구사항을 충족하며 정확한 결과를 얻을 수 있습니다.