๐Ÿฆญ GROUPING

๋‚˜๋‚˜'s Brainยท2024๋…„ 7์›” 8์ผ

MariaDB

๋ชฉ๋ก ๋ณด๊ธฐ
6/15
post-thumbnail

๐Ÿ“ GROUPING

๐Ÿ’ก GROUP BY์ ˆ์€ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์„ ํŠน์ • ์—ด์˜ ๊ฐ’์— ๋”ฐ๋ผ ๊ทธ๋ฃนํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. HAVING์€ GROUP BY ์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ์ ์šฉํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

GROUP BY + ( Having | Rollup )

๐Ÿ”– GROUP BY

โœ… GROUP BY๋ฅผ ํ™œ์šฉํ•œ ๋ฉ”๋‰ด๊ฐ€ ์กด์žฌํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ ๊ทธ๋ฃน ์กฐํšŒ

โžก๏ธ GROUP BY ๋กœ ์ธํ•œ ๊ทธ๋ฃน ์ค‘๋ณต ์ œ๊ฑฐ

    SELECT
           category_code
      FROM tbl_menu
     GROUP BY category_code;

โžก๏ธ COUNT ํ•จ์ˆ˜ ํ™œ์šฉ

    SELECT
           category_code
         , COUNT(*)
      FROM tbl_menu
     GROUP BY category_code;

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

โžก๏ธ SUM ํ•จ์ˆ˜ ํ™œ์šฉ

    SELECT
           category_code
         , SUM(menu_price)
      FROM tbl_menu
     GROUP BY category_code;

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

โžก๏ธ AVG ํ•จ์ˆ˜ ํ™œ์šฉ

    SELECT
           category_code
         , AVG(menu_price)
      FROM tbl_menu
     GROUP BY category_code;

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

โžก๏ธ 2๊ฐœ ์ด์ƒ์˜ ๊ทธ๋ฃน ์ƒ์„ฑ

    SELECT
           menu_price
         , category_code
      FROM tbl_menu
     GROUP BY menu_price, category_code; 

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

โžก๏ธ join๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ

    SELECT
           a.category_code
         , b.category_name
         , AVG(a.menu_price)
      FROM tbl_menu a
      JOIN tbl_category b ON (a.category_code = b.category_code)
     GROUP BY a.category_code, b.category_name;

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


๐Ÿ”– HAVING

โœ… HAVING์„ ํ™œ์šฉํ•ด 5๋ฒˆ(์ค‘์‹) ์นดํ…Œ๊ณ ๋ฆฌ๋ถ€ํ„ฐ 8๋ฒˆ(์ปคํ”ผ) ์นดํ…Œ๊ณ ๋ฆฌ๊นŒ์ง€์˜ ๋ฉ”๋‰ด ์นดํ…Œ๊ณ ๋ฆฌ ๋ฒˆํ˜ธ ์กฐํšŒ

    SELECT                               
           category_code                 
      FROM tbl_menu                      
     GROUP BY category_code              
    HAVING category_code BETWEEN 5 AND 8;

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


๐Ÿ”– ROLLUP

( ์ค‘๊ฐ„์ง‘๊ณ„ )

โœ… ์ปฌ๋Ÿผ ํ•œ ๊ฐœ๋ฅผ ํ™œ์šฉํ•œ ROLLUP (์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ดํ•ฉ)

    SELECT
           category_code
         , SUM(menu_price)
      FROM tbl_menu
     GROUP BY category_code
      WITH ROLLUP;

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

โœ… ์ปฌ๋Ÿผ ๋‘ ๊ฐœ๋ฅผ ํ™œ์šฉํ•œ ROLLUP (๊ฐ™์€ ๋ฉ”๋‰ด ๊ฐ€๊ฒฉ๋ณ„ ์ดํ•ฉ ๋ฐ ํ•ด๋‹น ๋ฉ”๋‰ด ๊ฐ€๊ฒฉ๋ณ„ ๊ฐ™์€ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์ดํ•ฉ๊ณผ ์ „์ฒด ) ROLLUP์„ ํ†ตํ•ด ๋จผ์ € ๋‚˜์˜จ ์ปฌ๋Ÿผ์˜ ์ดํ•ฉ์„ ๊ตฌํ•˜๊ณ  ์ดํ›„ ๋‚˜์˜ค๋Š” ์ปฌ๋Ÿผ๊ณผ์˜ ํ•ฉ๋„ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    SELECT
           menu_price
         , category_code
         , SUM(menu_price)
      FROM tbl_menu
     GROUP BY menu_price, category_code
      WITH ROLLUP;

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

โœ… ์—ฐ๋„๋ณ„, ์›”๋ณ„, ์ƒํ’ˆ๋ณ„ ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    CREATE TABLE sales (
        code INT AUTO_INCREMENT,
        year VARCHAR(4),
        month VARCHAR(2),
        product VARCHAR(50),
        amount DECIMAL(10,2),
        PRIMARY KEY(code)
    );
    
    INSERT INTO sales (code, year, month, product, amount) VALUES
    (null, '2023', LPAD('1', 2, '0'), 'Product A', 1000.00),
    (null, '2023', LPAD('1', 2, '0'), 'Product B', 1500.00),
    (null, '2023', LPAD('2', 2, '0'), 'Product A', 2000.00),
    (null, '2023', LPAD('2', 2, '0'), 'Product B', 2500.00),
    (null, '2023', LPAD('3', 2, '0'), 'Product A', 1200.00),
    (null, '2024', LPAD('3', 2, '0'), 'Product B', 1700.00);
    
    SELECT
           year
    	   , month
    	   , product
    	   , SUM(amount) AS total_sales
      FROM sales
     GROUP BY year, month, product WITH ROLLUP;

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

profile
"๋กœ์ปฌ์—์„  ๋ฌธ์ œ์—†์—ˆ๋Š”๋ฐโ€ฆ?"

0๊ฐœ์˜ ๋Œ“๊ธ€