Group by

[Database] SQL์—์„œ GROUP BY, ORDER BY

ODERR BY

์˜๋ฏธ

  • ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ํŠน์ • attribute(s)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•จ

  • default ์ •๋ ฌ ๋ฐฉ์‹์€ ์˜ค๋ฆ„์ฐจ์ˆœ(ASC)

  • ASC : ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

  • DESC : ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

์‚ฌ์šฉ ์˜ˆ์‹œ

  • SELECT <์ถ”์ถœํ•  attributes> FROM <ํ…Œ์ด๋ธ” ๋ช…> ORDER BY <์ •๋ ฌ ๊ธฐ์ค€ 1 attribute> [ASC or DESC] [, <์ •๋ ฌ ๊ธฐ์ค€ 2 attribute> [ASC or DESC]]

  • ์ž„์ง์›๋“ค์˜ ์ •๋ณด๋ฅผ ์—ฐ๋ด‰ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ

    // ์˜ค๋ฆ„์ฐจ์ˆœ
    SELECT * FROM employee ORDER BY salary; 
    
    // ๋‚ด๋ฆผ์ฐจ์ˆœ
    SELECT * FROM employee ORDER BY salary DESC;
    
    // ์—ฌ๋Ÿฌ ๊ธฐ์ค€ (๋ถ€์„œ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ›„ ์—ฐ๋ด‰ ๋‚ด๋ฆผ์ฐจ์ˆœ)
    SELECT * FROM employee ORDER BY dept_id ASC, salary DESC;

aggregate function

์˜๋ฏธ

  • ์—ฌ๋Ÿฌ tuple๋“ค์˜ ์ •๋ณด๋ฅผ ์š”์•ฝํ•ด์„œ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ถ”์ถœํ•˜๋Š” ํ•จ์ˆ˜

  • COUNT, SUM, MAX, MIN, AVG

  • ์ฃผ๋กœ ๊ด€์‹ฌ์žˆ๋Š” attribute์— ์‚ฌ์šฉ๋˜๋ฉฐ, NULL ๊ฐ’๋“ค์€ ์ œ์™ธํ•˜๊ณ  ์š”์•ฝ ๊ฐ’์„ ์ถ”์ถœํ•จ

  • SELECT์˜ ๊ฒฐ๊ณผ๋ฌผ๋กœ ๋‚˜์˜ค๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— SELECT ์ ˆ์— ํฌํ•จ์‹œ์ผœ์•ผ ํ•จ

์‚ฌ์šฉ ์˜ˆ์‹œ

  • SELECT COUNT (<attribute ์ด๋ฆ„>) FROM <ํ…Œ์ด๋ธ” ๋ช…>;

  • <attribute ์ด๋ฆ„> ์— *๋ฅผ ๋„ฃ์œผ๋ฉด ์ „์ฒด ํŠœํ”Œ์„ ๋Œ€์ƒ์œผ๋กœ ํ•œ๋‹ค๋Š” ๋œป. ํŠน์ • attribute๋ฅผ ๋„ฃ์œผ๋ฉด NULL ๊ฐ’์€ ์ œ์™ธํ•˜๊ณ  ์—ฐ์‚ฐํ•˜๊ฒŒ ๋จ

  • ์ž„์ง์› ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ

  • ํ”„๋กœ์ ํŠธ 2002์— ์ฐธ์—ฌํ•œ ์ž„์ง์› ์ˆ˜์™€ ์ตœ๋Œ€ ์—ฐ๋ด‰๊ณผ ์ตœ์†Œ ์—ฐ๋ด‰๊ณผ ํ‰๊ท  ์—ฐ๋ด‰ ๊ตฌํ•˜๊ธฐ

GROUP BY

์˜๋ฏธ

  • ๊ด€์‹ฌ ์žˆ๋Š” attribute(s) ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃน์„ ๋‚˜๋ˆ ์„œ ๊ทธ๋ฃน๋ณ„๋กœ aggregate funcion์„ ์ ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•จ

  • grouping attribute(s) : ๊ทธ๋ฃน์„ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€์ด ๋˜๋Š” attribute. ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃจํ•‘ ํ•  ์ˆ˜ ์žˆ์Œ

  • grouping attribute์— NULL ์ด ์žˆ์„ ๊ฒฝ์šฐ, NULL ๊ฐ’์„ ๊ฐ–๋Š” tuple๋ผ๋ฆฌ ๋ฌถ์Œ

์‚ฌ์šฉ ์˜ˆ์‹œ

  • ๊ฐ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•œ ์ž„์ง์› ์ˆ˜์™€ ์ตœ๋Œ€ ์—ฐ๋ด‰๊ณผ ์ตœ์†Œ ์—ฐ๋ด‰๊ณผ ํ‰๊ท  ์—ฐ๋ด‰ ๊ตฌํ•˜๊ธฐ

    • works_on ๊ณผ employee ๋ฅผ JOIN ํ•˜๊ณ 

    • proj_id ๋ณ„๋กœ ๊ทธ๋ฃนํ•‘์„ ํ•œ ๋‹ค์Œ์—

    • ๊ทธ๋ฃน๋ณ„๋กœ proj_id, COUNT, MAX, MIN, AVG ๋ฅผ ๊ตฌํ•จ

HAVING

์˜๋ฏธ

  • ๊ทธ๋ฃนํ•‘ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค€์— ์กฐ๊ฑด์„ ๊ฑธ์–ด์„œ ๊ทธ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๋Œ€์ƒ๋งŒ ๊ตฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

  • GROUP BY์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ

  • aggregate function์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ทธ๋ฃน์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

  • HAVING์ ˆ์— ๋ช…์‹œ๋œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ทธ๋ฃน๋งŒ ๊ฒฐ๊ณผ์— ํฌํ•จ

์‚ฌ์šฉ ์˜ˆ์‹œ

  • ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ ์ธ์›์ด 7๋ช… ์ด์ƒ์ธ ํ”„๋กœ์ ํŠธ๋“ค์— ๋Œ€ํ•ด์„œ ๊ฐ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•œ ์ž„์ง์› ์ˆ˜, ์ตœ๋Œ€ ์—ฐ๋ด‰, ์ตœ์†Œ ์—ฐ๋ด‰, ํ‰๊ท  ์—ฐ๋ด‰์„ ์•Œ๊ณ  ์‹ถ๋‹ค

์‚ฌ์šฉ ์˜ˆ์‹œ

  • ๊ฐ ๋ถ€์„œ๋ณ„ ์ธ์›์ˆ˜๋ฅผ ์ธ์› ์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ

  • ๊ฐ ๋ถ€์„œ๋ณ„-์„ฑ๋ณ„ ์ธ์›์ˆ˜๋ฅผ ์ธ์›์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ

  • ํšŒ์‚ฌ ์ „์ฒด ํ‰๊ท  ์—ฐ๋ด‰๋ณด๋‹ค ํ‰๊ท  ์—ฐ๋ด‰์ด ์ ์€ ๋ถ€์„œ๋“ค์˜ ํ‰๊ท  ์—ฐ๋ด‰์„ ์•Œ๊ณ  ์‹ถ๋‹ค

  • ๊ฐ ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•œ 90๋…„๋Œ€์ƒ๋“ค์˜ ์ˆ˜์™€ ์ด๋“ค์˜ ํ‰๊ท  ์—ฐ๋ด‰์„ ์•Œ๊ณ  ์‹ถ๋‹ค

  • ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ ์ธ์›์ด 7๋ช… ์ด์ƒ์ธ ํ”„๋กœ์ ํŠธ์— ํ•œ์ •ํ•ด์„œ ๊ฐ ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•œ 90๋…„๋Œ€์ƒ๋“ค์˜ ์ˆ˜์™€ ์ด๋“ค์˜ ํ‰๊ท  ์—ฐ๋ด‰์„ ์•Œ๊ณ  ์‹ถ๋‹ค

    • GROUP BY ๋’ค์— HAVING COUNT(*) >= 7 ๋กœ ํ•˜๋ฉด ์•ˆ๋จ.

    • ์—ฌ๊ธฐ์„œ์˜ COUNT๋Š” ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ ์ธ์›์ด ์•„๋‹ˆ๋ผ, ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•œ 90๋…„๋Œ€์ƒ ์ธ์›์ด๊ธฐ ๋•Œ๋ฌธ

SELECT ๋กœ ์กฐํšŒํ•˜๊ธฐ ์š”์•ฝ

  • SELECT attribute(s) or aggregate function(s) : ๊ด€์‹ฌ์žˆ๋Š” attribute๋‚˜ aggregate๋ฅผ ๋ฝ‘์•„์˜ฌ๊ฑฐ๋‹ค

  • FROM table(s) : ์กฐํšŒํ•  table or JOINํ•œ table์„ ์ง€์ •ํ•จ

  • [WHERE condition(s)] : ๊ฐ€์ ธ์˜ฌ tuple์„ ์กฐ๊ฑด์„ ํ†ตํ•ด์„œ ํ•„ํ„ฐ๋ง ํ•จ

  • [GROUP BY group attribute(s)] : ํŠœํ”Œ๋“ค์„ ๊ทธ๋ฃนํ•‘์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ

  • [HAVING group condition(s)] : ๊ทธ๋ฃนํ•‘ ๊ฒฐ๊ณผ๋กœ ํŠน์ • ๊ทธ๋ฃน๋งŒ ํ•„ํ„ฐ๋ง ํ•˜๊ณ  ์‹ถ์„ ๋•Œ

  • [ORDER BY attribute(s)] : ์œ„์˜ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์„ ๋•Œ

SELECT์˜ ๊ฐœ๋…์ ์ธ ์‹คํ–‰ ์ˆœ์„œ

  • ์•„๋ž˜๋Š” ๊ฐœ๋…์ ์ธ ์ˆœ์„œ์ผ ๋ฟ, ์‹ค์ œ ์‹คํ–‰ ์ˆœ์„œ๋Š” RDBMS์˜ ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฆ„

    1. SELECT attribute(s) or aggregate function(s)

    1. FROM table(s)

    1. [WHERE condition(s)]

    1. [GROUP BY group attribute(s)]

    1. [HAVING group condition(s)]

    1. [ORDER BY attribute(s)]

Last updated