1. ๋ฌธ์ ์ค๋ช
๋ฌธ์
๋ถํ๋ ์ฐ๋(YEAR), ๋ถํ๋ ์ฐ๋๋ณ ๋์ฅ๊ท ํฌ๊ธฐ์ ํธ์ฐจ(YEAR_DEV), ๋์ฅ๊ท ๊ฐ์ฒด์ ID(ID) ๋ฅผ ์ถ๋ ฅํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ๋ถํ๋ ์ฐ๋๋ณ ๋์ฅ๊ท ํฌ๊ธฐ์ ํธ์ฐจ๋ ๋ถํ๋ ์ฐ๋๋ณ ๊ฐ์ฅ ํฐ ๋์ฅ๊ท ์ ํฌ๊ธฐ - ๊ฐ ๋์ฅ๊ท ์ ํฌ๊ธฐ๋ก ๊ตฌํ๋ฉฐ ๊ฒฐ๊ณผ๋ ์ฐ๋์ ๋ํด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ ๊ฐ์ ์ฐ๋์ ๋ํด์๋ ๋์ฅ๊ท ํฌ๊ธฐ์ ํธ์ฐจ์ ๋ํด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ฃผ์ธ์.
2. ์ ๊ทผ๋ฐฉ๋ฒ
๊ฐ์ฅ ํฐ ๋์ฅ๊ท ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํด์ค์ผ ํ๋ฏ๋ก MAX(SIZE_OF_COLONY)๋ฅผ ํด ์ค์ผ ํ ๊ฒ ๊ฐ๊ณ ์ฐ๋๋ณ๋ก ๊ตฌํด์ผ ํ๋๊น ์๋์ฐ ํจ์์จ ์ค์ ์ฐ๋๋ก ํํฐ์ ๋ ํด ์ฃผ์ด์ผ ํ๋ค. ์ผ๋จ ์ด ์์ ์ ๋จผ์ ํ ํ์ ํด๋น ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ ํด ์ฃผ๊ณ ORDER BY ์ ๋ ฌ์ ํด ์ฃผ์ด์ผ ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๋จผ์ , ํธ์ฐจ ๊ณ์ฐ์ ํ์ํ ์ปฌ๋ผ์ ๋ถ๋ฌ์ค๋ ์์ ์ ํ๋ค. ์ฟผ๋ฆฌ์ ๋ชฉ์ ์ ์ฐ๋๋ณ ๋์ฅ๊ท ํฌ๊ธฐ ํธ์ฐจ(YEAR_DEV)๋ฅผ ๊ณ์ฐํ๊ณ , ์ฐ๋(YEAR)์ ๋์ฅ๊ท ๊ฐ์ฒด(ID)๋ฅผ ํจ๊ป ์ถ๋ ฅํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์
- ID
- SIZE_OF_COLONY
- YEAR(DIFFERENTIATION_DATE)
- MAX(SIZE_OF_COLONY) OVER (PARTITION BY YEAR(DIFFERENTIATION_DATE))
๋ฅผ ๋ถ๋ฌ์์ผ ํ๋ค.
์ฌ๊ธฐ๊น์ง ์ฟผ๋ฆฌ๋ฅผ ์ง๋ฉด ์ด๋ ๊ฒ ๋๋ค.
SELECT
ID,
SIZE_OF_COLONY,
YEAR(DIFFERENTIATION_DATE) AS YEAR,
MAX(SIZE_OF_COLONY) OVER (PARTITION BY YEAR(DIFFERENTIATION_DATE)) AS MAX_SIZE
FROM ECOLI_DATA
์ด๋ ๊ฒ ์์ ํ ์ด๋ธ์ ๋ง๋ค์ด ์ฃผ์์ผ๋ฉด ์ด ํ ์ด๋ธ์ FROM ์ ์ ๋ฃ์ด์ค์ ์๋ธ์ฟผ๋ฆฌ๋ก ํ์ฉํ๋ค.
๋์ฅ๊ท ํฌ๊ธฐ ํธ์ฐจ ๊ณ์ฐ์ ํ๊ณ , ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ํด ์ฃผ๋ฉด ๋๋ค.
3. ์ ๋ต์ฝ๋
SELECT
YEAR,
(MAX_SIZE - SIZE_OF_COLONY) AS YEAR_DEV,
ID
FROM (
SELECT
ID,
SIZE_OF_COLONY,
YEAR(DIFFERENTIATION_DATE) AS YEAR,
MAX(SIZE_OF_COLONY) OVER (PARTITION BY YEAR(DIFFERENTIATION_DATE)) AS MAX_SIZE
FROM ECOLI_DATA
) AS TEMP
ORDER BY YEAR, YEAR_DEV;
์๋ธ์ฟผ๋ฆฌ์ ALIAS๋ฅผ ๊ผญ ์ค์ผ ํ๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํด๋น ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์์ ํ ์ด๋ธ๋ก ๊ฐ์ฃผํ๊ธฐ ๋๋ฌธ์, ์ด ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ ค๋ฉด ๋ฐ๋์ ์ด๋ฆ์ ์์์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒ์์๋ SELECT ์ ์ YEAR(DIFFERENTIATION_DATE)๋ผ๊ณ ์จ์ ์ค๋ฅ๊ฐ ๋ฌ๋๋ฐ ์ด๋ฏธ ์๋ธ์ฟผ๋ฆฌ์์ ๋ณ์นญ์ ์ฃผ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ YEAR์ด๋ผ๊ณ ์จ ์ฃผ๋๊น ์ ๋ต ์ฒ๋ฆฌ๊ฐ ๋๋ค.
DATE์์ ์ฐ๋ ์ถ์ถํ ์ ์๋ ํจ์๋ `YEAR()`๋ง๊ณ ๋ `EXTRACT`๋ ์๋ค.
`EXTRACT(YEAR FROM ์ปฌ๋ผ๋ช )` ํ์์ผ๋ก ์ฌ์ฉํ๋ค.
SELECT
EXTRACT(YEAR FROM DIFFERENTIATION_DATE) AS YEAR,
(MAX_SIZE - SIZE_OF_COLONY) AS YEAR_DEV,
ID
FROM (
SELECT
ID,
SIZE_OF_COLONY,
DIFFERENTIATION_DATE,
MAX(SIZE_OF_COLONY) OVER (PARTITION BY EXTRACT(YEAR FROM DIFFERENTIATION_DATE)) AS MAX_SIZE
FROM ECOLI_DATA
) AS TEMP
ORDER BY YEAR, YEAR_DEV;