-
SQL - ๊ทธ๋ฃนํจ์, GROUP BY์ , HAVING์ DATABASE 2020. 7. 20. 08:27
๐ฏ SQL ๊ทธ๋ฃนํจ์์ GROUP BY์ , HAVING์ ์ ์ดํด๋ณธ๋ค.
๋ค์ค ํ ํจ์
๊ฒ์๋๋ ๋ชจ๋ ํ์ ๋ํด ํจ์๊ฐ ์ ์ฉ๋์ด ํ๋์ ๊ฒฐ๊ณผ๋ง์ ๋ฆฌํดํ๋ค.
์ ๋ ฅ์ฒ๋ฆฌ๋๋ ์๋ฃ์ ๊ฐ์์ ๋ฌด๊ดํ๊ฒ ๋จ ํ๋์ ๊ฒฐ๊ณผ๋ง ๋ฐํ๋๋ค.
๊ทธ๋ฃนํจ์
์ฌ๋ฌํ ๋๋ ํ ์ด๋ธ ์ ์ฒด์ ๋ํด ํจ์ ์ ์ฉ, ํ๋์ ๊ฒฐ๊ณผ ๋ฐํ(๊ทธ๋ ๊ฒ ์๊ฒผ์)
๊ธฐ๋ณธ์ ์ผ๋ก ๋null๊ฐ์ ์ ์ธํ๊ณ ๊ณ์ฐ๋๋ค.
SUM ํจ์ : SUM( DISTINCT | ALL | ์ปฌ๋ผ๋ช )
ํด๋น ์ปฌ๋ผ๊ฐ๋ค์ ์ดํฉ ๊ตฌํ๊ธฐ
DISTINCT ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ณต๊ฐ ์ ์ธํ๊ณ ๊ณ์ฐ, ALL ์ ์ค๋ณต ํฌํจ.
์๋ฌด๊ฒ๋ ์์จ์ฃผ๋ฉด ALL ์ ์ฉ. ALL์ ๋ณดํต ์๋ตํ๋ค.
COUNT ํจ์ : COUNT( DISTINCT | ALL | ์ปฌ๋ผ๋ช )
ํ์ ๊ฐฏ์ ๋ฐํ
COUNT(*) ํ๋ฉด ํ ์ด๋ธ์ ์ ์ฒด ํ์ ๊ฐ์๋ฅผ ๊ตฌํ ์ ์๋ค.
์์ธ์ ์ผ๋ก ๋๊ฐ๋ ํฌํจ๋๋ ํจ์.
AVG ํจ์ : AVG( DISTINCT | ALL | ์ปฌ๋ผ๋ช )
์ปฌ๋ผ๊ฐ์ ํ๊ท ๊ตฌํ๊ธฐ
MAX ํจ์ : MAX( DISTINCT | ALL | ์ปฌ๋ผ๋ช )
์ปฌ๋ผ๊ฐ ์ค ์ต๋๊ฐ. ์๋ค๋ ์ซ์๋ฐ์ดํฐ ๋ฟ๋ง์๋๋ผ ๋ฌธ์,๋ ์ง๋ฐ์ดํฐ์๋ ์ฌ์ฉ๊ฐ๋ฅ.
MIN ํจ์ : MIN( DISTINCT | ALL | ์ปฌ๋ผ๋ช )
์ปฌ๋ผ๊ฐ ์ค ์ต์๊ฐ ๊ตฌํ๊ธฐ
์ค์ต๋ฌธ์
๐ SELECT์ ๋ณต์กํ 6๊ฐ์ ์ปฌ๋ผ๋ค์ ํ๋์ฉ ํด์ํด๋ณด์
ํ ์ด๋ธ์ ๋ฑ๋ก๋์ด ์๋ ์ธ์์ ์ ์ฒด ์นด์ดํธ,
์ปค๋ฏธ์ ์์ ๋์ด ์๋ ์ธ์์๋ ๊ทธ๋๋ก ์นด์ดํธํ๋ฉด ์์์ ๋๊ฐ์ด ๊ฑธ๋ฌ์ง๊ฑฐ๊ณ ,
์ปค๋ฏธ์ ์ ๋์ด ์๋ ์ธ์์๋ ๊ทธ๋ฅ ํ๊ท ํจ์ ๋ฃ์ผ๋ฉด ๋๊ฐ ๊ฑธ๋ฌ์ง๊ณ ,
์ ์ฒด ์ปค๋ฏธ์ ์ ํ๊ท ์ ๋๋ 0์ผ๋ก ์ ํ ํด์ ๊ณ์ฐํด์ผํ๋๊น ํ๊ท ํจ์ ์์ NVLํจ์ ์จ์ ์ปค๋ฏธ์ ๋ ์ด๊ธฐ๊ฐ 0์ผ๋ก ์ค์ ,
๋ฑ๋ก๋์ด ์๋ ๋ถ์์ ์๋ ์นด์ดํธ๋ก ๊ทธ๋ฅ ๊ตฌํ๋ฉด ๋๋๋ฐ,
์ค๋ณต ์ ์ธํ๋ ค๋ฉด ์นด์ดํธ ์์ DISTINCT ์จ์ฃผ๊ธฐ.
๐ ๋ ๋ํ ์ผํ๊ฒ ๊ฐ์ ์ถ๋ ฅํ ๊ฒ์ด๋ค.
GROUP BY ์
SELECT [๋จ์ ์ปฌ๋ผ ,] ๊ทธ๋ฃนํจ์, ๊ทธ๋ฃนํจ์2 FROM ํ ์ด๋ธ๋ช [WHERE ์กฐ๊ฑด์] [GROUP BY ๋จ์์ปฌ๋ผ] [ORDER BY ํํ์];
ํน์ ์ปฌ๋ผ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ ๋ฌถ์ ๋ ์ฌ์ฉ
๋จ์ ์ปฌ๋ผ์ ๊ทธ๋ฃนํํ๋ฉด select์ ์์ ๊ทธ๋ฃนํจ์์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
๋จ์ ์ปฌ๋ผ๊ณผ ๊ทธ๋ฃนํจ์๋ SELECT ์ ์์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
๋จ์ ์ปฌ๋ผ์ด ๋ฐํํ๋ ํ์ ์ฌ๋ฌ๊ฐ์ธ๋ฐ, ๊ทธ๋ฃนํจ์๋ ์ค์ง ํ๋์ ๊ฒฐ๊ณผ๋ง ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋์ ์คํ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ ๋์ ์ถ๋ ฅํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ ๋์ ์ฌ์ฉํ๋ ค๋ฉด ๋จ์์ปฌ๋ผ์ ๊ทธ๋ฃนํํ๋ฉด ๋๋ค.์ฌ์ฉ์์
EMP์์ JOB์ด ๊ฐ์ ์ฌ์๋ค๋ผ๋ฆฌ ๋ฌถ์ด์ ๊ทธ๋ฃน๋ณ ํ๊ท ์๊ธ์ ๊ฒ์ํ ์ ์๋ค.
๋ถ์๊ฐ ๊ฐ์ ์ฌ์๋ผ๋ฆฌ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ ๊ทธ๋ฃน๋ณ๋ก ๋ช๋ช ์ฉ ์๋์ง ๋ณผ ์ ์๋ค.
์ฃผ์์ ์ด ๋ง๋ค
SELECT๋ก ์์ํด์ ORDER BY๋ก ๋๋๊ณ
GROUP BY ๋ค์์ด ORDER BY ์์๋ค.
๊ทธ๋ฃน๋ฐ์ด๋ก ๋ฌถ์ ์ปฌ๋ผ์ ์ ๋ ํธ์๋ ์์ด์ผํ๋ค.
ORDER BY์๋ ๋ค๋ฅด๊ฒ GROUP BY ๋ค์ ALIAS๋ ์ปฌ๋ผ ์์ ์ ์๊ฐ์ ์ธ ์์๋ค. ๋ฐ๋์ ๋ช ์ํ ์ปฌ๋ผ ์ด๋ฆ ๊ทธ๋๋ก ์ธ ๊ฒ
WHERE ์ ์๋ ๊ทธ๋ฃนํจ์๊ฐ ์ฌ ์ ์๋ค.
๋ถ์๋ณ' ์ธ๊ธ ๋์ ๋ ๋ฐ๋ก SELECT ์ ์ปฌ๋ผ ๋ฃ๊ณ GROUP BY์ ์ ์ด์ฃผ๋ฉด ๋๊ฒ ๋ค.
HAVING์
๊ทธ๋ฃน์ผ๋ก ๊ตฌ๋ถ๋ ์ ๋ค์ ๋ ๊ฑธ๋ฌ๋ธ๋ค.
SELECT [๋จ์ ์ปฌ๋ผ ,] ๊ทธ๋ฃนํจ์, ๊ทธ๋ฃนํจ์2 FROM ํ ์ด๋ธ๋ช [WHERE ์กฐ๊ฑด์] [GROUP BY ๋จ์์ปฌ๋ผ] [HAVING ์กฐ๊ฑด์] [ORDER BY ํํ์];
์ ๋ฌธ์ฅ์ ์ค๋ผํด ์คํ์์
1. FROM์์ ํ ์ด๋ธ์ ํ
2. WHERE ์กฐ๊ฑด๊ณผ ์ผ์นํ๋ ํ ์ถ์ถ
3. ์ถ์ถ๋ ๋ฐ์ดํฐ ๊ทธ๋ฃนํ
4. ๊ทธ์ค์์ HAVING ์กฐ๊ฑด ์ผ์น ํ ์ถ๊ฐ๋ก ์ถ์ถ
5. SELECT์ ์ ๋ช ์๋ ์ปฌ๋ผ ํ์ธ
6. ODER BY๋ก ์ ๋ ฌ
์ค์ต๋ฌธ์
1. EMP ํ ์ด๋ธ์์ ์ ์ฒด ์๊ธ์ด 5000์ ์ด๊ณผํ๋ ๊ฐ ์ ๋ฌด์ ๋ํด์ ์ ๋ฌด์ ์๊ธ ํฉ๊ณ๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ ํ๋งค์์ ์ ์ธํ๊ณ ์ ๊ธ์ฌ ํฉ๊ณ๋ก ์ ๋ ฌ(๋ด๋ฆผ์ฐจ์)
2. ์ฌ์ํ ์ด๋ธ์์ ๋ถ์๋ณ ์ธ์์๊ฐ 6๋ช ์ด์์ธ ๋ถ์์ฝ๋ ๊ฒ์ํ๊ธฐ
๋ถ์๋ณ๋ก ๊ทธ๋ฃนํ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ธ ๋ฐ์ดํฐ๋ค ์ค์์ HAVING ์ ์ ์ฌ์ฉํด ์ง์ ๋ ์กฐ๊ฑด๊ณผ ์ผ์นํ๋ ํ๋ค์ ์ถ๊ฐ๋ก ์ถ์ถํ๋ค.
3. ์ฌ์ํ ์ด๋ธ๋ก๋ถํฐ ๋ ๋๋ณ , ์๋ณ ๊ธ์ฌํฉ๊ณ๋ฅผ ์ถ๋ ฅํ ์ ์๋ SQL๋ฌธ ์์ฑํ๊ธฐ
๊ธธ์1)
์ ์ฌ์ผ์์ ๋ ๋์ ์๋ณ์ ๊ฐ๊ฐ ๋ฐ๋ก ์ถ์ถํด์ผ ํ๊ณ , ๊ทธ๊ฒ์ ๊ทธ๋ฃนํํด์ ๊ธฐ์ค์ผ๋ก ์ก๊ณ ๊ทธ๋๋ก ์๋ฌ๋ฆฌ ํฉ๊ณ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๊ธธ์2)
SELECT์์ ์ฐ๋๋ณ, ์๋ณ๋ก ๋๋ ์ค๊ฑธ ๊ทธ๋ฃน๋ฐ์ด๋ก ๊ทธ๋๋ก ๋ค์ค๊ทธ๋ฃนํ ํด์คฌ์ด์ผ ํ๋๋ฐ HIREDATE ๋ฑ ํ๋๋ง ์ ์ด๋๋ ์ ๋ ฌ์ด ๊ธธ์ ์์๋ค.
์ฌ์ํ ์ด๋ธ์์ ์ฐ๋๋ณ, ์๋ณ์ ์๊ธํฉ๊ณ๋ฅผ ๋ณด๊ธฐ ์ํ๊ฑฐ๋๊น ์ฐ๋๋ณ, ์๋ณ์ด ๊ทธ๋ฃนํ ๋์ ์ปฌ๋ผ์ด๋ค.
๋ณํํจ์๋ ์ผ๋ฐํจ์๋ค. ์๋ค๋ค์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ๊ธฐ์ํด ๊ทธ๋ฃน๋ฐ์ด ์ ์ ๋ฃ์ด์ฃผ๊ณ , ๊ทธ ๊ทธ๋ฃน ๊ธฐ์ค์ผ๋ก ํฉ๊ณ ๊ฒฐ๊ณผ๊ฐ๋ง ๊ทธ๋๋ก ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
๐ NEXT : SQL JOIN ๊ณต๋ถํ๊ธฐ
๋ฐ์ํ'DATABASE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL ์กฐ์ธ, ์๋ธ์ฟผ๋ฆฌ ์ฐ์ต๋ฌธ์ ํ์ด๋ณด๊ธฐ (0) 2020.07.22 SQL - Join, ์๋ธ์ฟผ๋ฆฌ (0) 2020.07.21 SQL - ๋จ์ผ ํ ํจ์(๋ฌธ์/์ซ์/๋ ์ง/๋ณํ/์กฐ๊ฑด) (0) 2020.07.19 SQL-SELECT๋ฌธ ์ดํด๋ณด๊ธฐ (0) 2020.07.18 ์ค์ตํ๊ฒฝ ์ค๋น - ์๋ฐJDK, ์ค๋ผํด, SQL developer ์ค์นํ๊ธฐ (0) 2020.07.17