๋ฐ์ดํฐ๋ฅผ ์ง๊ณํ๋ค ๋ณด๋ฉด
๊ธฐ์ค ๊ฐ(์ฐ๋, ๋ถ๊ธฐ, ์ํ๊ฐ ๋ฑ)์ ๋ฐ๋ผ ํ๊ท ์ ๊ตฌํ ๋ค
์ด๋ฅผ ์ปฌ๋ผ ํํ๋ก ํผ์ณ์ ๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๋จ์ ์ง๊ณ์๋ ๋ค๋ฅด๊ฒ,
๊ฒฐ๊ณผ ํํ๋ฅผ ํ ๋ฒ ๋ ๋ณํํด์ผ ํ๋ ํจํด์ด๋ผ ์ ๋ฆฌํด ๋๋ค.
์๋๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ง๊ณ ํํ๋ค.
SELECT
category,
๊ธฐ์ค๊ฐ,
ROUND(AVG(score), 2) AS avg_score
FROM data_table
WHERE ๊ธฐ์ค๊ฐ BETWEEN A AND B
AND score IS NOT NULL
GROUP BY category, ๊ธฐ์ค๊ฐ;
์ด ์ฟผ๋ฆฌ๋
์นดํ
๊ณ ๋ฆฌ๋ณยท๊ธฐ์ค๊ฐ๋ณ ํ๊ท ์ ๊ณ์ฐํ๋ค.
๊ฒฐ๊ณผ ํํ๋ ๋๋ต ๋ค์๊ณผ ๊ฐ๋ค.
| category | ๊ธฐ์ค๊ฐ | avg_score |
|---|---|---|
| A | 1 | 78.32 |
| A | 2 | 80.15 |
| A | 3 | 79.40 |
| โฆ | โฆ | โฆ |
์ง๊ณ ์์ฒด๋ ๋ฌธ์ ์์ง๋ง,
๊ธฐ์ค๊ฐ์ ํ๋์ ๋น๊ตํ๊ธฐ์๋ ๋ค์ ๋ถํธํ๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ ๋ณดํต ์๋ ํํ๋ค.
| category | score_1 | score_2 | score_3 | score_4 | score_5 |
|---|
์ฆ,
์ด ํจํด์ ํํ pivot ํํ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
MySQL๊ณผ PostgreSQL ๋ชจ๋์์
๊ฐ์ฅ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์
CASE WHEN์ ์ด์ฉํ ์กฐ๊ฑด๋ถ ์ง๊ณ๋ค.
SELECT
category,
ROUND(AVG(CASE WHEN ๊ธฐ์ค๊ฐ = 1 THEN score END), 2) AS score_1,
ROUND(AVG(CASE WHEN ๊ธฐ์ค๊ฐ = 2 THEN score END), 2) AS score_2,
ROUND(AVG(CASE WHEN ๊ธฐ์ค๊ฐ = 3 THEN score END), 2) AS score_3,
ROUND(AVG(CASE WHEN ๊ธฐ์ค๊ฐ = 4 THEN score END), 2) AS score_4,
ROUND(AVG(CASE WHEN ๊ธฐ์ค๊ฐ = 5 THEN score END), 2) AS score_5
FROM data_table
WHERE ๊ธฐ์ค๊ฐ BETWEEN 1 AND 5
AND score IS NOT NULL
GROUP BY category
ORDER BY category;
์ปฌ๋ผ๋ช ๊ณผ ํ ์ด๋ธ๋ช ์ ์์์ด๋ฉฐ,
ํน์ ๋ฐ์ดํฐ์ ์ ์ง์ ๋๋ฌ๋ด์ง ์๋ ์ผ๋ฐ์ ์ธ ํํ๋ค.
CASE WHEN ๊ธฐ์ค๊ฐ = 1 THEN score END
AVG(...)
์ด๋ฅผ ๊ธฐ์ค๊ฐ๋ณ๋ก ๋ฐ๋ณตํ๋ฉด
๊ธฐ์ค๊ฐ์ด ์ปฌ๋ผ์ผ๋ก ํผ์ณ์ง ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค ์ ์๋ค.
CASE WHEN + AVGCASE WHEN + AVG(PostgreSQL์๋ FILTER ๋ฌธ๋ฒ๋ ์์ง๋ง,
์ผ๋ฐ์ ์ธ ํจํด ์ ๋ฆฌ์๋ CASE WHEN์ด ๊ฐ์ฅ ๋ณดํธ์ ์ด๋ค.)
Sql์์ ๊ฐ๋จํ๊ฒ ํผ๋ฒ ํํ ์ถ๋ ฅํด๋ณด๊ธฐ์ ์ ์ ํ๋ค.
๋ค๋ง, ์ด์ด ๋์ด๋ ์๋ก ๋นํจ์จ์ ์ด๋ฏ๋ก ๋ค๋ฅธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ค.