3.1 GROUP BY ๋ฌธ

SQL ์–ธ์–ด๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ์™ธ์—๋„ ์ฟผ๋ฆฌ ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ ๋ธŒ๋žœ๋“œ์˜ ์ œํ’ˆ ์ข…๋ฅ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์€๋ฐ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

this ์— ๋Œ€ํ•œ ํŠน์ˆ˜ ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค GROUP BY. ๋‹ค์Œ์€ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

GROUP BY column

๊ฐ ๋ธŒ๋žœ๋“œ์˜ ์ œํ’ˆ ์œ ํ˜• ์ˆ˜๋ฅผ ํ‘œ์‹œํ•˜๋„๋ก SQL์— ์š”์ฒญํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”์ฒญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

SELECT brand, COUNT(*)
FROM product
GROUP BY brand

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ƒํ‘œ ์„ธ๋‹ค(*)
(์—†๋Š”) 2
๋ณด์‰ฌ 4
์ด์ผ€์•„ 6
์—˜์ง€ 2
์Šค๋งˆํŠธํ”Œ๋ผ์›Œ 1

์–ด๋–ค ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”์ง€, ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ๋Š”์ง€ ๊ผผ๊ผผํžˆ ๋ถ„์„ํ•ด๋ณด์ž. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‘ ๊ฐœ์˜ ์—ด์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ธŒ๋žœ๋“œ ๋ชฉ๋ก์ด ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์€ ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์Œ "๋ธŒ๋žœ๋“œ --> ์ˆ˜๋Ÿ‰" ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์–ป๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค .

๋ธŒ๋žœ๋“œ ์ด๋ฆ„ ์ค‘์— ์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค NULL. ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ์“ฐ์—ฌ์ง„ ๋ธŒ๋žœ๋“œ์˜ ์ œํ’ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ NULL์—ฌ๊ธฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ ์˜ˆ์ƒ์น˜ ๋ชปํ–ˆ์ง€๋งŒ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋žœ๋“œ๊ฐ€ ์—†๋Š” ์ œํ’ˆ์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์š”์ฒญ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ ๋ธŒ๋žœ๋“œ์˜ ์ œํ’ˆ ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์–ด์„œ ๋ฅผ ์ผ๊ณ  GROUP BY brand, ์—์„œ ๋ธŒ๋žœ๋“œ ์™€ ํ‘œํ˜„์„ SELECT์ผ์Šต๋‹ˆ๋‹ค.COUNT(*)

COUNT(*)ํ–‰ ๊ทธ๋ฃน์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์†Œ์œ„ ์ง‘๊ณ„ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๊ทธ๋…€๋Š” ๋‹จ์ˆœํžˆ ์ˆซ์ž๋ฅผ ์„ธ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ๋งŽ์ด ์žˆ์œผ๋ฉฐ ๋‚˜์ค‘์— ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

3.2 GROUP BY๋ฅผ ์‚ฌ์šฉํ•œ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ

์ด์ œ ๊ฐ€๊ฒฉ์ด 10 ๋ฏธ๋งŒ์ธ ์ œํ’ˆ์„ ๋จผ์ € ๋ฒ„๋ฆฌ๊ณ  ๊ทธ๋ฃนํ™”ํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”์ฒญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ƒํ‘œ ์„ธ๋‹ค(*)
๋ณด์‰ฌ 4
์ด์ผ€์•„ 5
์—˜์ง€ 2
์Šค๋งˆํŠธํ”Œ๋ผ์›Œ 1

NULL ์ œํ’ˆ์ด ๋งค์šฐ ์ €๋ ดํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  NULL ์ œํ’ˆ์ด ์‚ฌ๋ผ์กŒ๊ณ  IKEA ์ œํ’ˆ ์ˆ˜๊ฐ€ 1๊ฐœ ๊ฐ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. 6๊ฐœ์—์„œ 5๊ฐœ๋กœ.

์ด๊ฒƒ์€ ๋จผ์ € ์›ํ•˜๋Š” ๋ผ์ธ์„ ํ•„ํ„ฐ์— ์ ์šฉํ•œ WHERE๋‹ค์Œ ๊ทธ๋ฃนํ™”๋ฅผ ๊ฒฐ๊ณผ์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

3.3 ๊ฒฐ๊ณผ์˜ ์—ด ์ด๋ฆ„

๊ทธ๋Ÿฐ๋ฐ ๊ฒฐ๊ณผ ์—ด์— ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด๋ฆ„์„ ์ œ์•ˆํ–ˆ๋Š”์ง€ ๋ณด์‹ญ๋‹ˆ๊นŒ count(*)? ํ•ฉ๊ณ„๋กœ ๋ฐ”๊พธ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”์ฒญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ƒํ‘œ ์ด
๋ณด์‰ฌ 4
์ด์ผ€์•„ 5
์—˜์ง€ 2
์Šค๋งˆํŠธํ”Œ๋ผ์›Œ 1

๊ธฐ์กด ์—ด์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์— ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๊ณ  ์—ด์— ์ƒˆ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

SELECT
id AS  product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ œํ’ˆ ID ์ƒํ’ˆ๋ช… ๊ฐ€๊ฒฉ
2 ์˜์ž 5.00
8 ๋žจํ”„ 15.00