๐ŸŒ 2-1-5. GROUP BY, HAVING ์ ˆ

๊ณผ๋ชฉ2. SQL ๊ธฐ๋ณธ๊ณผ ํ™œ์šฉ

์ œ1์žฅ SQL ๊ธฐ๋ณธ

์ œ5์ ˆ GROUP BY, HAVING ์ ˆ

1. ์ง‘๊ณ„ ํ•จ์ˆ˜(Aggregate Function)

์—ฌ๋Ÿฌ ํ–‰๋“ค์˜ ๊ทธ๋ฃน์ด ๋ชจ์—ฌ์„œ ๊ทธ๋ฃน๋‹น ๋‹จ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ฃผ๋Š” ๋‹ค์ค‘ํ–‰ ํ•จ์ˆ˜ ์ค‘ ์ง‘๊ณ„ ํ•จ์ˆ˜(Aggregate Function)์˜ ํŠน์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์—ฌ๋Ÿฌ ํ–‰๋“ค์˜ ๊ทธ๋ฃน์ด ๋ชจ์—ฌ์„œ ๊ทธ๋ฃน๋‹น ๋‹จ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

  • GROUP BY ์ ˆ์€ ํ–‰๋“ค์„ ์†Œ๊ทธ๋ฃนํ™” ํ•œ๋‹ค.

  • SELECT ์ ˆ, HAVING ์ ˆ, ORDER BY ์ ˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ANSI/ISO์—์„œ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ธฐ๋Šฅ์œผ๋กœ ๋ถ„๋ฅ˜ํ•œ ํ•จ์ˆ˜ ์ค‘ ๊ธฐ๋ณธ์ ์ธ ์ง‘๊ณ„ ํ•จ์ˆ˜๋Š” ๋ณธ ์ ˆ์—์„œ ์„ค๋ช…ํ•˜๊ณ , ROLLUP, CUBE, GROUPING SETS ๊ฐ™์€ GROUP ํ•จ์ˆ˜๋Š” 2์žฅ 5์ ˆ์—์„œ, ๋‹ค์–‘ํ•œ ๋ถ„์„ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ WINDOW ํ•จ์ˆ˜๋Š” 2์žฅ 4์ ˆ์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

์ง‘๊ณ„ ํ•จ์ˆ˜๋ช… ( [DISTINCT | ALL] ์นผ๋Ÿผ์ด๋‚˜ ํ‘œํ˜„์‹ )

์ง‘๊ณ„ํ•จ์ˆ˜๋ช…์— ์‚ฌ์šฉ๋˜๋Š” 2๊ฐ€์ง€ ์˜ต์…˜์— ๋Œ€ํ•œ ์„ค๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ALL : Default ์˜ต์…˜์ด๋ฏ€๋กœ ์ƒ๋žต ๊ฐ€๋Šฅํ•จ

  • DISTINCT : ๊ฐ™์€ ๊ฐ’์„ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ„์ฃผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ž„

์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ์ง‘๊ณ„ ํ•จ์ˆ˜๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ง‘๊ณ„ ํ•จ์ˆ˜๋Š” ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ฃผ๋กœ ์ˆซ์ž ์œ ํ˜•์— ์‚ฌ์šฉ๋˜์ง€๋งŒ, MAX, MIN, COUNT ํ•จ์ˆ˜๋Š” ๋ฌธ์ž, ๋‚ ์งœ ์œ ํ˜•์—๋„ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์ด๋‹ค.

[์˜ˆ์ œ] ์ผ๋ฐ˜์ ์œผ๋กœ ์ง‘๊ณ„ ํ•จ์ˆ˜๋Š” GROUP BY ์ ˆ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ๋˜์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด ํ…Œ์ด๋ธ” ์ „์ฒด๊ฐ€ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์ด ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” GROUP BY ์ ˆ ์—†์ด ๋‹จ๋…์œผ๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

์ „์ฒด ํ–‰์ˆ˜
ํ‚ค ๊ฑด์ˆ˜
์ตœ๋Œ€ํ‚ค
์ตœ์†Œํ‚ค
ํ‰๊ท ํ‚ค

480

447

196

165

179.31

1 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด COUNT(HEIGHT)๋Š” NULL๊ฐ’์ด ์•„๋‹Œ ํ‚ค(HEIGHT) ์นผ๋Ÿผ์˜ ๊ฑด์ˆ˜๋งŒ ์ถœ๋ ฅํ•˜๋ฏ€๋กœ COUNT(*)์˜ 480๋ณด๋‹ค ์ž‘์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” COUNT(*) ํ•จ์ˆ˜์— ์‚ฌ์šฉ๋œ ์™€์ผ๋“œ์นด๋“œ(*)๋Š” ์ „์ฒด ์นผ๋Ÿผ์„ ๋œปํ•˜๋Š”๋ฐ ์ „์ฒด ์นผ๋Ÿผ์ด NULL์ธ ํ–‰์€ ์กด์žฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ COUNT(*)๋Š” ์ „์ฒด ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ ๊ฒƒ์ด๊ณ , COUNT(HEIGHT)๋Š” HEIGHT ์นผ๋Ÿผ ๊ฐ’์ด NULL์ธ 33๊ฑด์€ ์ œ์™ธ๋œ ๊ฑด์ˆ˜์˜ ํ•ฉ์ด๋‹ค.

2. GROUP BY ์ ˆ

WHERE ์ ˆ์„ ํ†ตํ•ด ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ–ˆ์ง€๋งŒ ํ…Œ์ด๋ธ”์— 1์ฐจ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ด์™ธ์˜ ์ •๋ณด, ์˜ˆ๋ฅผ ๋“ค๋ฉด ๊ฐ ํŒ€๋ณ„๋กœ ์„ ์ˆ˜๊ฐ€ ๋ช‡ ๋ช…์ธ์ง€, ์„ ์ˆ˜๋“ค์˜ ํ‰๊ท  ์‹ ์žฅ๊ณผ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€, ๋˜๋Š” ๊ฐ ํŒ€์—์„œ ๊ฐ€์žฅ ํฐ ํ‚ค์˜ ์„ ์ˆ˜๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ๋“ฑ์˜ 2์ฐจ ๊ฐ€๊ณต ์ •๋ณด๋„ ํ•„์š”ํ•˜๋‹ค. GROUP BY ์ ˆ์€ SQL ๋ฌธ์—์„œ FROM ์ ˆ๊ณผ WHERE ์ ˆ ๋’ค์— ์˜ค๋ฉฐ, ๋ฐ์ดํ„ฐ๋“ค์„ ์ž‘์€ ๊ทธ๋ฃน์œผ๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ์†Œ๊ทธ๋ฃน์— ๋Œ€ํ•œ ํ•ญ๋ชฉ๋ณ„๋กœ ํ†ต๊ณ„ ์ •๋ณด๋ฅผ ์–ป์„ ๋•Œ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

GROUP BY ์ ˆ๊ณผ HAVING ์ ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค.

  • GROUP BY ์ ˆ์„ ํ†ตํ•ด ์†Œ๊ทธ๋ฃน๋ณ„ ๊ธฐ์ค€์„ ์ •ํ•œ ํ›„, SELECT ์ ˆ์— ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ์ง‘๊ณ„ ํ•จ์ˆ˜์˜ ํ†ต๊ณ„ ์ •๋ณด๋Š” NULL ๊ฐ’์„ ๊ฐ€์ง„ ํ–‰์„ ์ œ์™ธํ•˜๊ณ  ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • GROUP BY ์ ˆ์—์„œ๋Š” SELECT ์ ˆ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ALIAS ๋ช…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

  • ์ง‘๊ณ„ ํ•จ์ˆ˜๋Š” WHERE ์ ˆ์—๋Š” ์˜ฌ ์ˆ˜ ์—†๋‹ค. (์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GROUP BY ์ ˆ๋ณด๋‹ค WHERE ์ ˆ์ด ๋จผ์ € ์ˆ˜ํ–‰๋œ๋‹ค)

  • WHERE ์ ˆ์€ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ GROUP์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ์ „์— ํ–‰๋“ค์„ ๋ฏธ๋ฆฌ ์ œ๊ฑฐ์‹œํ‚จ๋‹ค.

  • HAVING ์ ˆ์€ GROUP BY ์ ˆ์˜ ๊ธฐ์ค€ ํ•ญ๋ชฉ์ด๋‚˜ ์†Œ๊ทธ๋ฃน์˜ ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ์กฐ๊ฑด์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

  • GROUP BY ์ ˆ์— ์˜ํ•œ ์†Œ๊ทธ๋ฃน๋ณ„๋กœ ๋งŒ๋“ค์–ด์ง„ ์ง‘๊ณ„ ๋ฐ์ดํ„ฐ ์ค‘, HAVING ์ ˆ์—์„œ ์ œํ•œ ์กฐ๊ฑด์„ ๋‘์–ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋‚ด์šฉ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.

  • HAVING ์ ˆ์€ ์ผ๋ฐ˜์ ์œผ๋กœ GROUP BY ์ ˆ ๋’ค์— ์œ„์น˜ํ•œ๋‹ค.

์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ณผ๊ฑฐ ๋ฒ„์ „์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ GROUP BY ์ ˆ์— ๋ช…์‹œ๋œ ์นผ๋Ÿผ์˜ ์ˆœ์„œ๋Œ€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ์ž๋™์œผ๋กœ ์‹ค์‹œ(๋น„๊ณต์‹์ ์ธ ์ง€์›์ด์—ˆ์Œ)ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ์œผ๋‚˜, ์›์น™์ ์œผ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ™˜๊ฒฝ์—์„œ๋Š” ๋’ค์—์„œ ์–ธ๊ธ‰ํ•  ORDER BY ์ ˆ์„ ๋ช…์‹œํ•ด์•ผ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์ด ์ˆ˜ํ–‰๋œ๋‹ค. ANSI/ISO ๊ธฐ์ค€์—์„œ๋„ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ORDER BY ์ ˆ์—์„œ๋งŒ ์–ธ๊ธ‰๋˜์–ด์žˆ์ง€, GROUP BY ์ ˆ์—๋Š” ์–ธ๊ธ‰๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.

[์˜ˆ์ œ] K-๋ฆฌ๊ทธ ์„ ์ˆ˜๋“ค์˜ ํฌ์ง€์…˜๋ณ„ ํ‰๊ท ํ‚ค๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€๋ž€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ ‘์ˆ˜ํ•˜์˜€๋‹ค. GROUP BY ์ ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ด๋Š”์ง€ ํฌ์ง€์…˜๋ณ„ ํ‰๊ท ํ‚ค๋ฅผ ๊ตฌํ•ด๋ณธ๋‹ค.

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

GROUP BY ์ ˆ์—์„œ ๊ทธ๋ฃน ๋‹จ์œ„๋ฅผ ํ‘œ์‹œํ•ด ์ฃผ์–ด์•ผ SELECT ์ ˆ์—์„œ ๊ทธ๋ฃน ๋‹จ์œ„์˜ ์นผ๋Ÿผ๊ณผ ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ˆ์ œ์™€ ๊ฐ™์ด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

[์˜ˆ์ œ] SELECT ์ ˆ์—์„œ ์‚ฌ์šฉ๋œ ํฌ์ง€์…˜์ด๋ผ๋Š” ํ•œ๊ธ€ ALIAS๋ฅผ GROUP BY ์ ˆ์˜ ๊ธฐ์ค€์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณธ๋‹ค.

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

GROUP BY POSITION ํฌ์ง€์…˜

  • 3ํ–‰์— ์˜ค๋ฅ˜: ERROR: SQL ๋ช…๋ น์–ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•˜๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด๋ฉด GROUP BY ์ ˆ์— "ํฌ์ง€์…˜"์ด๋ผ๊ณ  ํ‘œ์‹œ๋œ ๋ถ€๋ถ„์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์นผ๋Ÿผ์— ๋Œ€ํ•œ ALIAS๋Š” SELECT ์ ˆ์—์„œ ์ •์˜ํ•˜๊ณ  ORDER BY ์ ˆ์—์„œ๋Š” ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, GROUP BY ์ ˆ์—์„œ๋Š” ALIAS ๋ช…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ ์ฃผ๋Š” ์‚ฌ๋ก€์ด๋‹ค.

[์˜ˆ์ œ] ํฌ์ง€์…˜๋ณ„ ์ตœ๋Œ€ํ‚ค, ์ตœ์†Œํ‚ค, ํ‰๊ท ํ‚ค๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. (ํฌ์ง€์…˜๋ณ„์ด๋ž€ ์†Œ๊ทธ๋ฃน์˜ ์กฐ๊ฑด์„ ์ œ์‹œํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— GROUP BY ์ ˆ์„ ์‚ฌ์šฉํ•œ๋‹ค.)

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ํฌ์ง€์…˜๋ณ„๋กœ ํ‰๊ท ํ‚ค ์™ธ์—๋„ ์ธ์›์ˆ˜, ํ‚ค๋Œ€์ƒ ์ธ์›์ˆ˜, ์ตœ๋Œ€ํ‚ค, ์ตœ์†Œํ‚ค๊ฐ€ ์ œ๋Œ€๋กœ ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ORDER BY ์ ˆ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํฌ์ง€์…˜ ๋ณ„๋กœ ์ •๋ ฌ์€ ๋˜์ง€ ์•Š์•˜๋‹ค. ์ถ”๊ฐ€๋กœ ํฌ์ง€์…˜๊ณผ ํ‚ค ์ •๋ณด๊ฐ€ ์—†๋Š” ์„ ์ˆ˜๊ฐ€ 3๋ช…์ด๋ผ๋Š” ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํฌ์ง€์…˜์ด DF์ธ 172๋ช… ์ค‘ 30๋ช…์€ ํ‚ค์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒƒ๋„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. GK, DF, FW, MF์˜ ์ตœ๋Œ€ํ‚ค, ์ตœ์†Œํ‚ค, ํ‰๊ท ํ‚ค๋ฅผ ๊ตฌํ•  ๋•Œ ํ‚ค ๊ฐ’์ด NULL์ธ ๊ฒฝ์šฐ๋Š” ๊ณ„์‚ฐ ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋œ๋‹ค. ์ฆ‰ ํฌ์ง€์…˜ DF์˜ ์ตœ๋Œ€ํ‚ค, ์ตœ์†Œํ‚ค, ํ‰๊ท ํ‚ค ๊ฒฐ๊ณผ๋Š” ํ‚ค ๊ฐ’์ด NULL์ธ 30๋ช…์„ ์ œ์™ธํ•œ 142๋ช…์„ ๋Œ€์ƒ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ํ†ต๊ณ„ ๊ฒฐ๊ณผ์ด๋‹ค.

3. HAVING ์ ˆ

[์˜ˆ์ œ] K-๋ฆฌ๊ทธ ์„ ์ˆ˜๋“ค์˜ ํฌ์ง€์…˜๋ณ„ ํ‰๊ท ํ‚ค๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ, ํ‰๊ท ํ‚ค๊ฐ€ 180 ์„ผํ‹ฐ๋ฏธํ„ฐ ์ด์ƒ์ธ ์ •๋ณด๋งŒ ํ‘œ์‹œํ•˜๋ผ๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์ด ์ ‘์ˆ˜๋˜์—ˆ์œผ๋ฏ€๋กœ WHERE ์ ˆ๊ณผ GROUP BY ์ ˆ์„ ์‚ฌ์šฉํ•ด SQL ๋ฌธ์žฅ์„ ์ž‘์„ฑํ•œ๋‹ค.

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

WHERE AVG(HEIGHT) >= 180

  • 3ํ–‰์— ์˜ค๋ฅ˜: ERROR: ์ง‘๊ณ„ ํ•จ์ˆ˜๋Š” ํ—ˆ๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ์—์„œ WHERE ์ ˆ์˜ ์ง‘๊ณ„ ํ•จ์ˆ˜ AVG(HEIGHT) ๋ถ€๋ถ„์—์„œ "์ง‘๊ณ„ ํ•จ์ˆ˜๋Š” ํ—ˆ๊ฐ€๋˜์ง€ ์•Š๋Š”๋‹ค"๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค. ์ฆ‰ WHERE ์ ˆ์—๋Š” AVG()๋ผ๋Š” ์ง‘๊ณ„ ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. WHERE ์ ˆ์€ FROM ์ ˆ์— ์ •์˜๋œ ์ง‘ํ•ฉ(์ฃผ๋กœ ํ…Œ์ด๋ธ”)์˜ ๊ฐœ๋ณ„ ํ–‰์— WHERE ์ ˆ์˜ ์กฐ๊ฑด์ ˆ์ด ๋จผ์ € ์ ์šฉ๋˜๊ณ , WHERE ์ ˆ์˜ ์กฐ๊ฑด์— ๋งž๋Š” ํ–‰์ด GROUP BY ์ ˆ์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์˜ ํ–‰์— HAVING ์กฐ๊ฑด์ ˆ์ด ์ ์šฉ๋œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ HAVING ์ ˆ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋‚ด์šฉ๋งŒ ์ถœ๋ ฅ๋œ๋‹ค. ์ฆ‰ HAVING ์ ˆ์€ WHERE ์ ˆ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๊ทธ๋ฃน์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์˜ ํ–‰์— ์กฐ๊ฑด์ด ์ ์šฉ๋œ๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

[์˜ˆ์ œ] HAVING ์กฐ๊ฑด์ ˆ์—๋Š” GROUP BY ์ ˆ์—์„œ ์ •์˜ํ•œ ์†Œ๊ทธ๋ฃน์˜ ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ์กฐ๊ฑด์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, HAVING ์ ˆ์„ ์ด์šฉํ•ด ํ‰๊ท ํ‚ค๊ฐ€ 180 ์„ผํ‹ฐ๋ฏธํ„ฐ ์ด์ƒ์ธ ์ •๋ณด๋งŒ ํ‘œ์‹œํ•œ๋‹ค.

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

ํฌ์ง€์…˜
ํ‰๊ท ํ‚ค

GK

186.26

DF

180.21

2 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

GROUP BY ์ ˆ๊ณผ HAVING ์ ˆ์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์–ด์„œ ์ˆ˜ํ–‰ํ•˜๋”๋ผ๋„ ๋ฌธ๋ฒ• ์—๋Ÿฌ๊ฐ€ ์—†๊ณ  ๊ฒฐ๊ณผ๋ฌผ๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค(SQL Server์—์„œ๋Š” ๋ฌธ๋ฒ•์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค). ์‹คํ–‰ ๊ฒฐ๊ณผ์—์„œ ์ „์ฒด 4๊ฐœ ํฌ์ง€์…˜ ์ค‘์—์„œ ํ‰๊ท  ํ‚ค๊ฐ€ 180cm๊ฐ€ ๋„˜๋Š” 2๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

[์˜ˆ์ œ] SQL ๋ฌธ์žฅ์€ GROUP BY ์ ˆ๊ณผ HAVING ์ ˆ์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์–ด์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

ํฌ์ง€์…˜
ํ‰๊ท ํ‚ค

GK

186.26

DF

180.21

2 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

GROUP BY ์ ˆ๊ณผ HAVING ์ ˆ์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์–ด์„œ ์ˆ˜ํ–‰ํ•˜๋”๋ผ๋„ ๋ฌธ๋ฒ• ์—๋Ÿฌ๋„ ์—†๊ณ  ๊ฒฐ๊ณผ๋ฌผ๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ, SQL ๋‚ด์šฉ์„ ๋ณด๋ฉด, ํฌ์ง€์…˜์ด๋ž€ ์†Œ๊ทธ๋ฃน์œผ๋กœ ๊ทธ๋ฃนํ•‘(GROUPING)๋˜์–ด ํ†ต๊ณ„ ์ •๋ณด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ , ์ดํ›„ ์ ์šฉ๋œ ๊ฒฐ๊ณผ ๊ฐ’์— ๋Œ€ํ•œ HAVING ์ ˆ์˜ ์ œํ•œ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋…ผ๋ฆฌ์ ์œผ๋กœ GROUP BY ์ ˆ๊ณผ HAVING ์ ˆ์˜ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๋Š” ๊ฒƒ์„ ๊ถŒ๊ณ ํ•œ๋‹ค.

[์˜ˆ์ œ] K-๋ฆฌ๊ทธ์˜ ์„ ์ˆ˜๋“ค ์ค‘ ์‚ผ์„ฑ๋ธ”๋ฃจ์œ™์ฆˆ(K02)์™€ FC์„œ์šธ(K09)์˜ ์ธ์›์ˆ˜๋Š” ์–ผ๋งˆ์ธ๊ฐ€๋ž€ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์ ‘์ˆ˜๋˜์—ˆ๋‹ค. WHERE ์ ˆ๊ณผ GROUP BY ์ ˆ์„ ์‚ฌ์šฉํ•œ SQL๊ณผ GROUP BY ์ ˆ๊ณผ HAVING ์ ˆ์„ ์‚ฌ์šฉํ•œ SQL์„ ๋ชจ๋‘ ์ž‘์„ฑํ•œ๋‹ค.

[์˜ˆ์ œ]

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

ํŒ€ID
์ธ์›์ˆ˜

K02

49

K09

49

2 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

GROUP BY ์†Œ๊ทธ๋ฃน์˜ ๋ฐ์ดํ„ฐ ์ค‘ ์ผ๋ถ€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, GROUP BY ์—ฐ์‚ฐ ์ „ WHERE ์ ˆ์—์„œ ์กฐ๊ฑด์„ ์ ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•˜์—ฌ GROUP BY ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, GROUP BY ์—ฐ์‚ฐ ํ›„ HAVING ์ ˆ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ํ•„ํ„ฐ๋ง ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ HAVING ์ ˆ์—์„œ TEAM_ID ๊ฐ™์€ GROUP BY ๊ธฐ์ค€ ์นผ๋Ÿผ์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์œผ๋‚˜, ๊ฐ€๋Šฅํ•˜๋ฉด WHERE ์ ˆ์—์„œ ์กฐ๊ฑด์ ˆ์„ ์ ์šฉํ•˜์—ฌ GROUP BY์˜ ๊ณ„์‚ฐ ๋Œ€์ƒ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ธ ์ž์› ์‚ฌ์šฉ ์ธก๋ฉด์—์„œ ๋ฐ”๋žŒ์งํ•˜๋‹ค.

[์˜ˆ์ œ] ํฌ์ง€์…˜๋ณ„ ํ‰๊ท ํ‚ค๋งŒ ์ถœ๋ ฅํ•˜๋Š”๋ฐ, ์ตœ๋Œ€ํ‚ค๊ฐ€ 190cm ์ด์ƒ์ธ ์„ ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํฌ์ง€์…˜์˜ ์ •๋ณด๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

ํฌ์ง€์…˜
ํ‰๊ท ํ‚ค

GK

186.26

DF

180.21

FW

179.91

3 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

SQL์„ ๋ณด๋ฉด SELECT ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” MAX ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ HAVING ์ ˆ์—์„œ ์กฐ๊ฑด์ ˆ๋กœ ์‚ฌ์šฉํ•œ ์‚ฌ๋ก€์ด๋‹ค. ์ฆ‰ HAVING ์ ˆ์€ SELECT ์ ˆ์— ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์นผ๋Ÿผ์ด๋‚˜ ์ง‘๊ณ„ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ GROUP BY ์ ˆ์˜ ๊ธฐ์ค€ ํ•ญ๋ชฉ์ด๋‚˜ ์†Œ๊ทธ๋ฃน์˜ ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ์กฐ๊ฑด์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ 1์žฅ 8์ ˆ์˜ SELECT ๋ฌธ์žฅ์˜ ์‹คํ–‰ ์ˆœ์„œ์—์„œ ์ถ”๊ฐ€ ์„ค๋ช…ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ๊ฒƒ์€ WHERE ์ ˆ์˜ ์กฐ๊ฑด ๋ณ€๊ฒฝ์€ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฏ€๋กœ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, HAVING ์ ˆ์˜ ์กฐ๊ฑด ๋ณ€๊ฒฝ์€ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์€ ์—†๊ณ  ์ถœ๋ ฅ๋˜๋Š” ๋ ˆ์ฝ”๋“œ์˜ ๊ฐœ์ˆ˜๋งŒ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค. ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๋‹ค๋ฅธ ๊ฒฐ๊ณผ ๊ฐ’์˜ ๋ณ€๊ฒฝ ์—†์ด MAX(HEIGHT)๊ฐ€ 189cm๋กœ 190cm ๋ฏธ๋งŒ์ธ MF ํฌ์ง€์…˜์˜ ๋ฐ์ดํ„ฐ๋งŒ HAVING ์กฐ๊ฑด์— ์˜ํ•ด ๋ˆ„๋ฝ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. (๋‹ค๋ฅธ ํฌ์ง€์…˜์€ ๋ชจ๋‘ MAX(HEIGHT)๊ฐ€ 190์ด์ƒ์ด๋‹ค). ๋ˆ„๋ฝ๋œ ๋ฐ์ดํ„ฐ์˜ ํ†ต๊ณ„ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

ํฌ์ง€์…˜
์ธ์›์ˆ˜
ํ‚ค๋Œ€์ƒ
์ตœ๋Œ€ํ‚ค
์ตœ์†Œํ‚ค
ํ‰๊ท ํ‚ค

3

0

MF

162

162

189

165

176.31

2 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

4. CASE ํ‘œํ˜„์„ ํ™œ์šฉํ•œ ์›”๋ณ„ ๋ฐ์ดํ„ฐ ์ง‘๊ณ„

"์ง‘๊ณ„ ํ•จ์ˆ˜(CASE( ))~GROUP BY" ๊ธฐ๋Šฅ์€, ๋ชจ๋ธ๋ง์˜ ์ œ1์ •๊ทœํ™”๋กœ ์ธํ•ด ๋ฐ˜๋ณต๋˜๋Š” ์นผ๋Ÿผ์˜ ๊ฒฝ์šฐ ๊ตฌ๋ถ„ ์นผ๋Ÿผ์„ ๋‘๊ณ  ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ง‘ํ•ฉ์„, ์ •ํ•ด์ง„ ์นผ๋Ÿผ ์ˆ˜๋งŒํผ ํ™•์žฅํ•ด์„œ ์ง‘๊ณ„ ๋ณด๊ณ ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ์œ ์šฉํ•œ ๊ธฐ๋ฒ•์ด๋‹ค. ๋ถ€์„œ๋ณ„๋กœ ์›”๋ณ„ ์ž…์‚ฌ์ž์˜ ํ‰๊ท  ๊ธ‰์—ฌ๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋Š” ๊ณ ๊ฐ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๋Š”๋ฐ, ์ž…์‚ฌ ํ›„ 1๋…„๋งˆ๋‹ค ๊ธ‰์—ฌ ์ธ์ƒ์ด๋‚˜ ๋ณด๋„ˆ์Šค ์ง€๊ธ‰๊ณผ ๊ฐ™์€ ์ผ์ •์ด ์ •๊ธฐ์ ์œผ๋กœ ์žกํžŒ๋‹ค๋ฉด ์—…๋ฌด์ ์œผ๋กœ ์ค‘์š”ํ•œ ์ •๋ณด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

STEP1. ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ํ™•์ธ

[์˜ˆ์ œ] ๋จผ์ € ๊ฐœ๋ณ„ ์ž…์‚ฌ์ •๋ณด์—์„œ ์›”๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ์›”๋ณ„ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

[์˜ˆ์ œ] Oracle

[์˜ˆ์ œ] SQL Server

[์˜ˆ์ œ] SQL Server

[์‹คํ–‰ ๊ฒฐ๊ณผ]

ENAME
DEPTNO
์ž…์‚ฌ์›”
SAL

SMITH

20

12

800

ALLEN

30

2

1600

WARD

30

2

1250

JONES

20

4

2975

MARTIN

30

9

1250

BLAKE

30

5

2850

CLARK

10

6

2450

SCOTT

20

7

3000

KING

10

11

5000

TURNER

30

9

1500

ADAMS

20

7

1100

JAMES

30

12

950

FORD

20

12

3000

MILLER

10

1

1300

14 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

STEP2. ์›”๋ณ„ ๋ฐ์ดํ„ฐ ๊ตฌ๋ถ„

[์˜ˆ์ œ] ์ถ”์ถœ๋œ MONTH ๋ฐ์ดํ„ฐ๋ฅผ Simple Case Expression์„ ์ด์šฉํ•ด์„œ 12๊ฐœ์˜ ์›”๋ณ„ ์นผ๋Ÿผ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์‹คํ–‰ ๊ฒฐ๊ณผ์—์„œ ๋ณด์—ฌ ์ฃผ๋Š” ENAME ์นผ๋Ÿผ์€ ์ตœ์ข… ๋ฆฌํฌํŠธ์—์„œ ์š”๊ตฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์ •๋ณด์˜ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€๊ฐ€์ ์œผ๋กœ ๋ณด์—ฌ ์ฃผ๋Š” ์ž„์‹œ ์ •๋ณด์ด๋‹ค. FROM ์ ˆ์—์„œ ์‚ฌ์šฉ๋œ ์ธ๋ผ์ธ ๋ทฐ๋Š” 2์žฅ 1์ ˆ์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

ENAME
DEPTNO
M01
M02
M03
M04
M05
M06
M07
M08
M09
M10
M11
M12

SMITH

20

800

ALLEN

30

1600

WARD

30

1250

JONES

20

2975

MARTIN

30

1250

BLAKE

30

2850

CLARK

10

2450

SCOTT

20

3000

KING

10

5000

TURNER

30

1500

ADAMS

20

1100

JAMES

30

950

FORD

20

3000

MILLER

10

1300

14 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

STEP3. ๋ถ€์„œ๋ณ„ ๋ฐ์ดํ„ฐ ์ง‘๊ณ„

[์˜ˆ์ œ] ์ตœ์ข…์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ฆฌํฌํŠธ๋Š” ๋ถ€์„œ๋ณ„๋กœ ์›”๋ณ„ ์ž…์‚ฌ์ž์˜ ํ‰๊ท  ๊ธ‰์—ฌ๋ฅผ ์•Œ๊ณ  ์‹ถ๋‹ค๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์ด๋ฏ€๋กœ ๋ถ€์„œ๋ณ„ ํ‰๊ท ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด GROUP BY ์ ˆ๊ณผ AVG ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ง์› ๊ฐœ์ธ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๋” ์ด์ƒ ํ•„์š” ์—†์œผ๋ฏ€๋กœ ์ œ์™ธํ•œ๋‹ค. ORDER BY ์ ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€์„œ๋ฒˆํ˜ธ๋ณ„๋กœ ์ •๋ ฌ์ด ๋˜์ง€๋Š” ์•Š์•˜๋‹ค.

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

DEPTNO
M01
M02
M03
M04
M05
M06
M07
M08
M09
M10
M11
M12

10

1300

2450

5000

20

2988

1100

1900

30

1425

2850

1375

950

3 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ์— ์—ฌ๋Ÿฌ ๋ฒˆ CASE ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜๊ณ  ์ง‘๊ณ„ํ•จ์ˆ˜๊ฐ€ ์ ์šฉ๋˜๋ฏ€๋กœ SQL ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ๋‚˜์œ ๊ฒƒ์ด ์•„๋‹ˆ๋ƒ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฆฌํฌํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์žฅ๋ฌธ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด, ์œ„ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹Œ ํ•˜๋‚˜์˜ SQL ๋ฌธ์žฅ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ DBMS ์ž์› ํ™œ์šฉ์ด๋‚˜ ์ฒ˜๋ฆฌ ์†๋„์—์„œ ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค. ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฒ˜๋ฆฌ ์†๋„ ์ฐจ์ธ๋А ๋” ๋‚  ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ฐ€๋Šฅํ•œ ํ•˜๋‚˜์˜ SQL ๋ฌธ์žฅ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค์ ์ธ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

[์˜ˆ์ œ] Simple Case Expression์œผ๋กœ ํ‘œํ˜„๋œ ์œ„์˜ SQL๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์œผ๋กœ Oracle์˜ DECODE ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ SQL ๋ฌธ์žฅ์„ ์ž‘์„ฑํ•œ๋‹ค.

[์˜ˆ์ œ]

DECODE ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ SQL ๋ฌธ์žฅ์ด ์กฐ๊ธˆ ๋” ์งง์•„์กŒ๋‹ค. CASE ํ‘œํ˜„๊ณผ Oracle์˜ DECODE ํ•จ์ˆ˜๋Š” ํ‘œํ˜„์ƒ ์„œ๋กœ ์žฅ๋‹จ์ ์ด ์žˆ์œผ๋ฏ€๋กœ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์„ ํƒํ•  ์ง€๋Š” ์‚ฌ์šฉ์ž์˜ ๋ชซ์ด๋‹ค.

5. ์ง‘๊ณ„ ํ•จ์ˆ˜์™€ NULL ์ฒ˜๋ฆฌ

๋ฆฌํฌํŠธ์˜ ๋นˆ์นธ์„ NULL์ด ์•„๋‹Œ ZERO๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด NVL(Oracle)/ISNULL(SQL Server) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ๋‹ค์ค‘ ํ–‰ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์˜คํžˆ๋ ค ๋ถˆํ•„์š”ํ•œ ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๊ตณ์ด NVL ํ•จ์ˆ˜๋ฅผ ๋‹ค์ค‘ ํ–‰ ํ•จ์ˆ˜ ์•ˆ์— ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋‹ค์ค‘ ํ–‰ ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ์ „์ฒด ๊ฑด์ˆ˜๊ฐ€ NULL ๊ฐ’์ธ ๊ฒฝ์šฐ๋งŒ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ€ NULL์ด ๋‚˜์˜ค๊ณ  ์ „์ฒด ๊ฑด์ˆ˜ ์ค‘์—์„œ ์ผ๋ถ€๋งŒ NULL์ธ ๊ฒฝ์šฐ๋Š” NULL์ธ ํ–‰์„ ๋‹ค์ค‘ ํ–‰ ํ•จ์ˆ˜์˜ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด 100๋ช… ์ค‘ 10๋ช…์˜ ์„ฑ์ ์ด NULL ๊ฐ’์ผ ๋•Œ ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ๋‹ค์ค‘ ํ–‰ ํ•จ์ˆ˜ AVG๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด NULL ๊ฐ’์ด ์•„๋‹Œ 90๋ช…์˜ ์„ฑ์ ์— ๋Œ€ํ•ด์„œ ํ‰๊ท ๊ฐ’์„ ๊ตฌํ•˜๊ฒŒ ๋œ๋‹ค. CASE ํ‘œํ˜„ ์‚ฌ์šฉ์‹œ ELSE ์ ˆ์„ ์ƒ๋žตํ•˜๊ฒŒ ๋˜๋ฉด Default ๊ฐ’์ด NULL์ด๋‹ค. NULL์€ ์—ฐ์‚ฐ์˜ ๋Œ€์ƒ์ด ์•„๋‹Œ ๋ฐ˜๋ฉด, SUM(CASE MONTH WHEN 1 THEN SAL ELSE 0 END)์ฒ˜๋Ÿผ ELSE ์ ˆ์—์„œ 0(Zero)์„ ์ง€์ •ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•˜๊ฒŒ 0์ด SUM ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์ž์›์˜ ์‚ฌ์šฉ์ด ๋งŽ์•„์ง„๋‹ค. ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ฐ€๋Šฅํ•œ ELSE ์ ˆ์˜ ์ƒ์ˆ˜๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ELSE ์ ˆ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. ๊ฐ™์€ ์ด์œ ๋กœ Oracle์˜ DECODE ํ•จ์ˆ˜๋Š” 4๋ฒˆ์งธ ์ธ์ž๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด NULL์ด Default๋กœ ํ• ๋‹น๋œ๋‹ค. ๋งŽ์ด ์‹ค์ˆ˜ํ•˜๋Š” ๊ฒƒ ์ค‘์— ํ•˜๋‚˜๊ฐ€ Oracle์˜ SUM(NVL(SAL,0)), SQL Server์˜ SUM(ISNULL (SAL,0)) ์—ฐ์‚ฐ์ด๋‹ค. ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ์˜ ๊ธ‰์—ฌ(SAL)๊ฐ€ NULL์ธ ๊ฒฝ์šฐ๋Š” NULL์˜ ํŠน์„ฑ์œผ๋กœ ์ž๋™์ ์œผ๋กœ SUM ์—ฐ์‚ฐ์—์„œ ๋น ์ง€๋Š” ๋ฐ, ๋ถˆํ•„์š”ํ•˜๊ฒŒ NVL/ISNULL ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด 0(Zero)์œผ๋กœ ๋ณ€ํ™˜์‹œ์ผœ ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜๋งŒํผ์˜ ์—ฐ์‚ฐ์ด ์ผ์–ด๋‚˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ์‹œ์Šคํ…œ์˜ ์ž์›์„ ๋‚ญ๋น„ํ•˜๋Š” ์ผ์ด๋‹ค. ๋ฆฌํฌํŠธ ์ถœ๋ ฅ ๋•Œ NULL์ด ์•„๋‹Œ 0์„ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” NVL(SUM(SAL),0)์ด๋‚˜, ISNULL(SUM(SAL),0)์ฒ˜๋Ÿผ ์ „์ฒด SUM์˜ ๊ฒฐ๊ณผ๊ฐ€ NULL์ธ ๊ฒฝ์šฐ(๋Œ€์ƒ ๊ฑด์ˆ˜๊ฐ€ ๋ชจ๋‘ NULL์ธ ๊ฒฝ์šฐ)์—๋งŒ ํ•œ ๋ฒˆ NVL/ISNULL ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

[์˜ˆ์ œ] ํŒ€๋ณ„ ํฌ์ง€์…˜๋ณ„ FW, MF, DF, GK ํฌ์ง€์…˜์˜ ์ธ์›์ˆ˜์™€ ํŒ€๋ณ„ ์ „์ฒด ์ธ์›์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” SQL ๋ฌธ์žฅ์„ ์ž‘์„ฑํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” 0์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค.

[์˜ˆ์ œ]

SIMPLE_CASE_EXPRESSION ์กฐ๊ฑด - Oracle

[์˜ˆ์ œ]

SIMPLE_CASE_EXPRESSION ์กฐ๊ฑด - Oracle CASE ํ‘œํ˜„์˜ ELSE 0, ELSE NULL ๋ฌธ๊ตฌ๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กฐ๊ธˆ ๋” ์งง๊ฒŒ SQL ๋ฌธ์žฅ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Default ๊ฐ’์ธ NULL์ด ์ ์šฉ๋จ.

[์˜ˆ์ œ]

SEARCHED_CASE_EXPRESSION ์กฐ๊ฑด - Oracle

[์˜ˆ์ œ]

SEARCHED_CASE_EXPRESSION ์กฐ๊ฑด - SQL Server

[์‹คํ–‰ ๊ฒฐ๊ณผ]

TEAM_ID
FW
MF
DF
GK
SUM

K14

0

1

1

0

2

K06

11

11

20

4

46

K13

1

0

1

1

3

K15

1

1

1

0

3

K02

10

18

17

4

49

K12

1

0

1

0

2

K04

13

11

18

4

46

K03

6

15

23

5

49

K07

9

22

16

4

51

K05

10

19

17

5

51

K08

8

15

15

4

45

K11

1

1

1

0

3

K01

12

15

13

5

45

K10

5

15

13

3

36

K09

12

18

15

4

49

15 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์˜ˆ์ œ SQL ๋ฌธ์žฅ์€ ๊ฐ™์€ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ORDER BY ์ ˆ์ด ์ ์šฉ๋„์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ TEAM_ID๋ณ„๋กœ ์ •๋ ฌ๋ผ ์žˆ์ง€ ์•Š๋‹ค. TEAM_ID 'K08'์˜ ๊ฒฝ์šฐ POSITION์ด NULL์ธ 3๊ฑด์ด ํฌ์ง€์…˜๋ณ„ ๋ถ„๋ฅ˜์—๋Š” ๋น ์ ธ ์žˆ์ง€๋งŒ SUM์—๋Š” ์ถ”๊ฐ€๋˜์–ด ์žˆ๋‹ค. ์ด๋Š” TEAM_ID 'K08'์˜ ๊ฐ POSITION์˜ ํ•ฉ๊ณ„(FW+MF+DF+GK)๊ฐ€ 42๊ฑด์ด๊ณ  SUM๊ฐ’์ด 45๊ฑด์ธ๊ฒƒ์œผ๋กœ ๊ณ„์‚ฐํ• ์ˆ˜์žˆ๋‹ค(44-42=3).

[์˜ˆ์ œ] GROUP BY ์ ˆ ์—†์ด ์ „์ฒด ์„ ์ˆ˜๋“ค์˜ ํฌ์ง€์…˜๋ณ„ ํ‰๊ท  ํ‚ค ๋ฐ ์ „์ฒด ํ‰๊ท  ํ‚ค๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

[์˜ˆ์ œ]

[์‹คํ–‰ ๊ฒฐ๊ณผ]

๋ฏธ๋“œํ•„๋”
ํฌ์›Œ๋“œ
๋””ํŽœ๋”
๊ณจํ‚คํผ
์ „์ฒดํ‰๊ท ํ‚ค

176.31

179.91

180.21

186.26

179.31

1 ๊ฐœ์˜ ํ–‰์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : ๋ฐ์ดํ„ฐ์˜จ์—์–ด โ€“ ํ•œ๊ตญ๋ฐ์ดํ„ฐ์‚ฐ์—…์ง„ํฅ์›(https://dataonair.or.krarrow-up-right)

Last updated