Contents
내가 작성한 쿼리
2016년 tiv_2016년에 모든 총 투자 가치의 합계를 보고하는 솔루션을 작성하세요:
* 다른 하나 이상의 보험 가입자와 동일한 tiv_2015 값을 가지며,
* 다른 보험 가입자와 같은 도시에 위치하지 않습니다(즉, (라트, 론) 속성 쌍은 고유해야 함).
tiv_2016을 소수점 두 자리로 반올림합니다.
내가 작성한 쿼리
Oracle
SELECT
ROUND(SUM(tiv_2016), 2) AS tiv_2016 -- 조건을 만족하는 정책의 2016 투자 금액 합계를 소수점 2자리까지 반올림
FROM
Insurance i
WHERE
EXISTS (
-- 같은 tiv_2015를 가진 다른 사람이 존재해야 함 (즉, 중복된 값)
SELECT 1
FROM Insurance
WHERE tiv_2015 = i.tiv_2015
AND pid != i.pid
)
AND NOT EXISTS (
-- 같은 위치(lat, lon)를 가진 다른 사람이 없어야 함 (위치가 유일해야 함)
SELECT 1
FROM Insurance
WHERE lat = i.lat AND lon = i.lon
AND pid != i.pid
);
MySQL
SELECT
ROUND(SUM(tiv_2016), 2) AS tiv_2016
FROM
Insurance
WHERE
tiv_2015 IN (
-- 중복된 tiv_2015를 가진 pid만 포함
SELECT tiv_2015
FROM Insurance
GROUP BY tiv_2015
HAVING COUNT(*) > 1
)
AND (lat, lon) IN (
-- lat, lon이 유일한 위치만 포함 (즉, 같은 도시에 다른 policyholder가 없는 경우)
SELECT lat, lon
FROM Insurance
GROUP BY lat, lon
HAVING COUNT(*) = 1
);
차이점
- 다중 컬럼 조합 조건 사용 (
(lat, lon) IN (...)
) MySQL
: 지원Oracle
: 11g 이상에서 지원 (단, 일부 환경에서는EXISTS
또는 조인으로 변경 필요)
Share article