19 Fri

๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•œ ์ค‘๊ธ‰ SQL

OT

๊ธฐ์ดˆ SQL๊ณผ ๋™์ผ

๋ณด๊ณ ์‹ถ์€ ๋ฐ์ดํ„ฐ ์š”์•ฝํ•˜๊ธฐ

COUNT, SUM, AVG, MIN/MAX

SELECT COUNT(*)
FROM Customers;
  • COUNT

    • ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค.

    • ๋งŒ์•ฝ NULL ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ์„ธ์ง€ ์•Š๋Š”๋‹ค

      • EX) Num = [1, 2, 3, 4, NULL] => COUNT(Num) => 4

    • DISTINCT๋ฅผ ์‚ฌ์šฉํ•ด ์…€ ์ˆ˜๋„ ์žˆ๋‹ค.

      • EX) SELECT COUNT(DISTINCT Num) => 3

SELECT SUM(price)
FROM Products;
  • SUM

    • ๋ฐ์ดํ„ฐ๋“ค์˜ ์ดํ•ฉ์„ ๊ตฌํ•œ๋‹ค.

  • AVG

    • ๋ฐ์ดํ„ฐ๋“ค์˜ ํ‰๊ท ์„ ๊ตฌํ•œ๋‹ค

    • ์ด ๋•Œ NULL์˜ ๊ฐœ์ˆ˜๋Š” ์„ธ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— NULL์„ ์ œ์™ธํ•œ ๊ฐœ์ˆ˜๋กœ ๋‚˜๋ˆˆ ๊ฐ’์„ ์–ป๊ฒŒ๋œ๋‹ค.

    • ๋”ฐ๋ผ์„œ AVG() ํ•จ์ˆ˜๋ฅผ ์“ธ์ง€ SUM()/COUNT() ํ•จ์ˆ˜๋ฅผ ์“ธ์ง€๋ฅผ ์ž˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค

  • MAX

    • ๋ฐ์ดํ„ฐ ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•œ๋‹ค

  • MIN

    • ๋ฐ์ดํ„ฐ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•œ๋‹ค

GROUP BY & HAVING

SELECT SupplierID, Categoryid, AVG(Price) AS avg_price
FROM Products
GROUP BY SupplierID, Categoryid
HAVING avg_price >= 100
  • GROUP BY : ํŠน์ • ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค

    • ํŠน์ • SUM์„ ํ•  ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์ง€๋Š” ์•Š๋Š”๋‹ค

    • ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ์„ ์กฐ์ž‘ํ•ด์„œ ๋ด์•ผํ•  ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค

    • GROUP BY ๋’ค์— ์˜ค๋Š” ์ปฌ๋Ÿผ๋ช…์€ SELECT ๋’ค์—๋„ ๊ฐ™์ด ์™€์•ผ ์•Œ์•„๋ณด๊ธฐ๊ฐ€ ์‰ฝ๋‹ค

    • SELECT ๋’ค์— ์˜ค๋Š” ์ˆœ์„œ๋Œ€๋กœ Index๋ฅผ GROUP BY ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

      • EX) GROUP BY 1, 2 = GROUP BY SupplierID, Categoryid

      • ๊ทธ๋Ÿฌ๋‚˜ ๊ถŒ์žฅํ•˜๋Š” ๋ฌธ๋ฒ•์€ ์•„๋‹ˆ๋‹ค. ์ปฌ๋Ÿผ๋ช…์„ ์ •ํ™•ํ•˜๊ฒŒ ๋ฐํžˆ๋Š” ๊ฒƒ์ด ์ข‹์Œ

  • -- : line comment

  • /* */ : block comment

  • HAVING : GROUP BY์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค

    • WHERE ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ 

      • WHERE ๋Š” GROUP BY ์ด์ „์— ๋จผ์ € ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถˆ๋Ÿฌ์™€์ง€์ง€ ์•Š๋Š”๋‹ค.

      • GROUP BY ์ดํ›„์— ์กฐ๊ฑด์ด ์ ์šฉ๋˜์–ด์•ผ ํ•˜๋ฉฐ WHERE ๋Š” GROUP BY ์•ž์— ํ•ญ์ƒ ์™€์•ผ ํ•˜๋ฏ€๋กœ ๊ทธ ๋Œ€์‹  HAVING ์„ ์‚ฌ์šฉํ•œ๋‹ค

  • AS : ํŠน์ • ๋ฐ์ดํ„ฐ์˜ ์ด๋ฆ„์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ

์กฐ๊ฑด๋ฌธ

CASE

SELECT CASE
	WHEN categoryid = 1 THEN '์Œ๋ฃŒ'
	WHEN categoryid = 2 THEN '์กฐ๋ฏธ๋ฃŒ'
	ELSE '๊ธฐํƒ€'
	END AS 'categoryName', *
FROM Products
  • CASE ~ END : ์กฐ๊ฑด์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ปฌ๋Ÿผ์„ ์žฌ์ƒ์„ฑ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค

    • WHEN : ์กฐ๊ฑด์„ ๋ช…์‹œํ•œ๋‹ค. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž AND ๋‚˜ OR ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

    • THEN : ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•œ๋‹ค

    • ELSE : ๋ชจ๋“  ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•œ๋‹ค

ํ…Œ์ด๋ธ” ํ”ผ๋ด‡

SELECT AVG(CASE WHEN categoryid = 1 THEN PRICE END) 
	AS category1_avg_price,
	AVG(CASE WHEN categoryid = 2 THEN PRICE END)
	AS category2_avg_price,
	AVG(CASE WHEN categoryid = 3 THEN PRICE ELSE NULL END)
	AS category3_avg_price
FROM Products
  • ๋ฐ์ดํ„ฐ๋ฅผ ์š”์•ฝํ•˜๋Š” ํ‘œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผ

Last updated

Was this helpful?