[LeetCode] 585. Investments in 2016
๐ข ๋ณธ ํฌ์คํ ์ ํ์ฉ๋๋ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฐ ์๋ฃ ์ถ์ฒ๋
๋ฆฌํธ์ฝ๋ Problems, https://leetcode.com/problemset/all/์์ ๋ฐํ๋๋ค.
โ ๋ฌธ์
https://leetcode.com/problems/investments-in-2016/description/
Investments in 2016 - LeetCode
Can you solve this real interview question? Investments in 2016 - Table: Insurance +-------------+-------+ | Column Name | Type | +-------------+-------+ | pid | int | | tiv_2015 | float | | tiv_2016 | float | | lat | float | | lon | float | +-------------
leetcode.com
Table : Insurance
Write an SQL query to report the sum of all total investment values in 2016 tiv_2016, for all policyholders who:
- have the same tiv_2015 value as one or more other policyholders, and
- are not located in the same city like any other policyholder (i.e., the (lat, lon) attribute pairs must be unique).
Round tiv_2016 to two decimal places.
… ์๋ต
โ ํ์ด
๋ฌธ์ ์๊ตฌ์ฌํญ
sql ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ ๋ชจ๋ ๋ณดํ ๊ณ์ฝ์์ ๋ํด tiv_2016์ ์ด ํฌ์๊ฐ์น ํฉ๊ณ๋ฅผ ์ถ๋ ฅ
์กฐ๊ฑดโ ๋ณดํ ๊ณ์ฝ์๋ ํ๋ช ์ด์์ ๋ค๋ฅธ ๋ณดํ ๊ณ์ฝ์์ ๋์ผํ tiv_2015๊ฐ์ ๊ฐ์ง๊ณ ์๊ณ
์กฐ๊ฑดโก ๋ค๋ฅธ ๋ณดํ ๊ณ์ฝ์์ ๊ฐ์ ๋์์ ์์ง ์์. → (lat, lon) ์์ ๊ณ ์ ๊ฐ์ด์ด์ผ ํ๋ค.
์กฐ๊ฑดโข tiv_2016 ํฉ๊ณ๋ ์์์ ๋์๋ฆฌ๊น์ง๋ง ์ถ๋ ฅํ๋ค.
์กฐ๊ฑดโ , โก๋ WHERE์ ์์ ์ ์ฉํ๋๋ฐ
โ ์ tiv_2015 ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํํ์ ๋ ์ง๊ณ๊ฐ 1์ ์ด๊ณผ*ํ๋ tiv_2015๋ง ์ถ๋ ฅํ๋ค.
โก์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ pid๊ฐ ์๋ก ๊ฐ์ง ์์(=์๊ธฐ์์ ์ ์ ์ธํ) ๋ณดํ๊ณ์ฝ ๊ฑด์ (lat, lon)๋ง ์ถ์ถํ๊ณ
์ถ๋ ฅํ๊ณ ์ ํ๋ (lat, lon)์ด ์๋ธ์ฟผ๋ฆฌ์์ ์ถ๋ ฅ๋ (lat, lon)๊ณผ ๋์ผํ์ง ์์ ๋ณดํ๊ณ์ฝ๋ง ์ถ๋ ฅํ๋ค.
*'์ด๊ณผ'๋ก ์ค์ ํ ์ด์ → '๋ณดํ๊ณ์ฝ์๋ ํ๋ช ์ด์์ ๋ค๋ฅธ ๋ณดํ ๊ณ์ฝ์์~' ์ฆ ์ต์ 2๋ช ์ด ์ง๊ณ๋๋ค.
โข tiv_2016์ ์์์ ์ดํ ๋์๋ฆฌ๊น์ง ์ถ๋ ฅ → ROUNDํจ์ ์ ์ฉ
SELECT ROUND(SUM(tiv_2016), 2) AS tiv_2016
FROM Insurance I1
WHERE tiv_2015 IN (SELECT tiv_2015 FROM Insurance
GROUP BY 1
HAVING count(*) > 1)
AND (I1.lat, I1.lon) NOT IN (SELECT lat, lon
FROM Insurance I2
WHERE I1.pid != I2.pid)