๋Œ€์žฅ์ฟต์•ผ 2023. 3. 19. 20:35

ex17_group_by

 

    select ์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ  --4. ์ปฌ๋Ÿผ์„ ์„ ํƒ
    from ํ…Œ์ด๋ธ”        --1. ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ
    where ์กฐ๊ฑด         --2. ์›ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ
    group by ๊ธฐ์ค€      --3. ๊ทธ๋ฃน์„ ๋‚˜๋ˆ ์„œ
    order by ์ •๋ ฌ;     --5. ์ •๋ ฌํ•œ๋‹ค.
    
    
    group by์ ˆ
    - ๋ ˆ์ฝ”๋“œ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ทธ๋ฃน์„ ๋‚˜๋ˆ„๋Š” ์—ญํ• 
    - ํŠน์ • ์ปฌ๋Ÿผ์„ ๋Œ€์ƒ์œผ๋กœ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ ˆ์ฝ”๋“œ๋“ค๋ผ๋ฆฌ ๊ทธ๋ฃน์„ ๋ฌถ๋Š” ์—ญํ• 
    - ๊ทธ๋ฃน์„ ์™œ ๋‚˜๋ˆ„๋Š”์ง€? > ๊ฐ๊ฐ์˜ ๋‚˜๋ˆ ์ง„ ๊ทธ๋ฃน์„ ๋Œ€์ƒ > ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ!!!(****************)
 

select
    round(avg(basicpay)),
    buseo
from tblInsa
    group by buseo;


-- ๋‚จ์ž ๋ช‡๋ช…? ์—ฌ์ž ๋ช‡๋ช…? > ๋‚จ๋…€๋ณ„ ๊ฐ๊ฐ ๋ช‡๋ช…์ธ์ง€?
select * from tblComedian;

select count(*), gender
    from tblComedian
        group by gender;


-- ๋Œ€๋ฅ™๋ณ„ ๊ตญ๊ฐ€์ˆ˜?
select 
    count(*), continent
from tblCountry
    group by continent;


select
    buseo,
    count(*) as "๋ถ€์„œ๋ณ„ ์ธ์›์ˆ˜",
    sum(basicpay) as "๋ถ€์„œ๋ณ„ ๊ธ‰์—ฌ ํ•ฉ",
    round(avg(basicpay)) as "๋ถ€์„œ๋ณ„ ํ‰๊ท  ๊ธ‰์—ฌ",
    max(ibsadate) as "๋ถ€์„œ๋ณ„ ๋ง‰๋‚ด์˜ ์ž…์‚ฌ์ผ",
    min(ibsadate) as "๋ถ€์„œ๋ณ„ ๊ณ ์ฐธ์˜ ์ž…์‚ฌ์ผ"
from tblInsa
    group by buseo;


select
    gender,
    round(avg(height)) as "๋‚จ๋…€๋ณ„ ํ‰๊ท  ํ‚ค",
    round(avg(weight), 1) as "๋‚จ๋…€๋ณ„ ํ‰๊ท  ๋ชธ๋ฌด๊ฒŒ",
    max(height) as "ํ‚ค๊ฐ€ ๊ฐ€์žฅ ํฐ์‚ฌ๋žŒ",
    min(height) as "ํ‚ค๊ฐ€ ๊ฐ€์žฅ ์ž‘์€์‚ฌ๋žŒ"
from tblComedian
    group by gender;


--์ง์—…๋ณ„ ์ธ์›์ˆ˜? ๋งŽ์€ > ์ ์€
select 
    job,
    count(*)
from tblAddressBook
    group by job
        --order by count(*) desc;
        order by job asc;





select
    round(avg(basicpay)), --์ง‘ํ•ฉ๊ฐ’(์ง‘๊ณ„ํ•จ์ˆ˜)
    name                  --๊ฐœ์ธ๊ฐ’(์ผ๋ฐ˜์ปฌ๋Ÿผ)
from tblInsa;

--์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์˜ ์—๋Ÿฌ
select
    round(avg(basicpay)),   --ํ‰๊ท ๊ธ‰์—ฌ > ์ง‘ํ•ฉ๊ฐ’
    buseo,                  --๋ถ€์„œ๋ช… > ํ‘œํ˜„(๊ฐœ์ธ๊ฐ’์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ) > ์‹ค์ œ(๊ทธ๋ฃน์—ญํ• ) > ์ง‘ํ•ฉ๊ฐ’
    name                    --์ง์›๋ช… > ๊ฐœ์ธ๊ฐ’.. ์—๋Ÿฌ
from tblInsa
    group by buseo;



-- ๋‹ค์ค‘ ๊ทธ๋ฃน
-- 1์ฐจ ๊ทธ๋ฃน(๋ถ€์„œ) > 2์ฐจ ๊ทธ๋ฃน(์ง์œ„)
select
    buseo as "๋ถ€์„œ๋ช…",
    jikwi as "์ง์œ„๋ช…", 
    count(*) as "์ธ์›์ˆ˜"
from tblInsa
    group by buseo, jikwi
        order by buseo, jikwi;

-- ์„ฑ๋ณ„ ์ธ์›์ˆ˜?
select 
    count(*),
    substr(ssn, 8, 1)
from tblInsa
    group by substr(ssn, 8, 1);


-- ์ง€์—ญ๋ณ„ ์ธ์›์ˆ˜?
-- ์„œ์šธํŠน๋ณ„์‹œ ๊ด‘์ง„๊ตฌ ๊ธด๊ณ ๋ž‘๋กœ 13๊ธธ 5 ~ 42
-- ๊ด‘์ฃผ๊ด‘์—ญ์‹œ ์„œ๊ตฌ ์ƒ๋ฌดํ‰ํ™”๋กœ 62 ~ 64
-- ๊ฒฝ๊ธฐ๋„ ํ™”์„ฑ์‹œ ๋ด‰๋‹ด์ ๋งค๋ด‰๋กœ 123๋ฒˆ๊ธธ 55

select * from tblAddressBook;

select 
    substr(address, 1, instr(address, ' ') - 1),
    count(*)
from tblAddressBook
    group by substr(address, 1, instr(address, ' ')- 1);


-- ์ด๋ฉ”์ผ ์‚ฌ์ดํŠธ๋ณ„ ์ธ์›์ˆ˜?

select
    substr(email, instr(email, '@') + 1),
    count(*)
from tblAddressBook
    group by substr(email, instr(email, '@') + 1)
        order by count(*) desc;


-- ๊ธ‰์—ฌ๋ณ„ ๊ทธ๋ฃน > ์ธ์›์ˆ˜?
-- 100๋งŒ์› ์ดํ•˜
-- 100๋งŒ์› ~ 200๋งŒ์›
-- 200๋งŒ์› ์ด์ƒ
select
    basicpay,
    floor(basicpay / 1000000)
from tblInsa;

select
    (floor(basicpay / 1000000) + 1) * 100 || '๋งŒ์› ์ดํ•˜' as "๊ธ‰์—ฌ๋Œ€",
    count(*) as "์ธ์›์ˆ˜"
from tblInsa
    group by floor(basicpay / 1000000)
        order by floor(basicpay / 1000000) asc;



-- ํ•œ์ผ? ์•ˆํ•œ์ผ? ๊ฐ๊ฐ ๋ช‡๊ฐœ?
select 
    count(*),
    case
        when completedate is null then '์•ˆํ•œ์ผ'
        when completedate is not null then 'ํ•œ์ผ'
    end
from tblTodo
    group by case
        when completedate is null then '์•ˆํ•œ์ผ'
        when completedate is not null then 'ํ•œ์ผ'
    end;

    select ์ปฌ๋Ÿผ๋ฆฌ์ŠคํŠธ  --5. ์ปฌ๋Ÿผ์„ ์„ ํƒ
    from ํ…Œ์ด๋ธ”        --1. ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ
    where ์กฐ๊ฑด         --2. ์›ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ
    group by ๊ธฐ์ค€      --3. ๊ทธ๋ฃน์„ ๋‚˜๋ˆ ์„œ
    having์ ˆ           --4. ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์กฐ๊ฑด
    order by ์ •๋ ฌ;     --6. ์ •๋ ฌํ•œ๋‹ค.

 

    *** where์ ˆ vs having์ ˆ
    
    having์ ˆ (group by์™€ ์ปคํ”Œ)
    - ์กฐ๊ฑด์ ˆ
    - group by์œผ๋กœ๋ถ€ํ„ฐ ๋‚˜์˜จ ์…‹์— ๋Œ€ํ•œ ์กฐ๊ฑด(์‹คํ–‰ ์ˆœ์„œ: group by > having)
    - ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ์งˆ๋ฌธ > ์ง‘๊ณ„ ํ•จ์ˆ˜๊ฐ’์„ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ
    
    where์ ˆ (from๊ณผ ์ปคํ”Œ)
    - ์กฐ๊ฑด์ ˆ
    - from์œผ๋กœ๋ถ€ํ„ฐ ๋‚˜์˜จ ์…‹์— ๋Œ€ํ•œ ์กฐ๊ฑด(์‹คํ–‰ ์ˆœ์„œ: from > where)
    - ๊ฐœ์ธ์— ๋Œ€ํ•œ ์งˆ๋ฌธ(ํ–‰) > ์ปฌ๋Ÿผ๊ฐ’์„ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ
    
    select๋ฌธ(***)
    1. ๊ฐ ์ ˆ์˜ ์—ญํ• 
    2. ๊ฐ ์ ˆ์˜ ์‹คํ–‰ ์ˆœ์„œ

 

-- ๊ทธ๋ฃน(buseo) > ์ธ์›์ˆ˜(count)
select
    count(*), buseo     --3. ๊ทธ๋ฃน๋ณ„ ์…€๋ ‰ํŠธ(๊ทธ๋ฃน๋ณ„๋กœ count์„ธ๊ณ , ๋ถ€์„œ๊ฐ’ ๊ฐ€์ ธ์˜ด)
from tblInsa            --1. ์›๋ณธ
    group by buseo;     --2. ๋ถ€์„œ์ปฌ๋Ÿผ ํ™•์ธ, ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ์• ๋“ค๋ผ๋ฆฌ ๊ทธ๋ฃน ํ˜•์„ฑ



-- ์„œ์šธ ์‚ฌ๋Š” ์ง์› > ๋ถ€์„œ๋ณ„ ์ธ์›์ˆ˜?
select
    count(*), buseo         --4.
from tblInsa                --1. ํ…Œ์ด๋ธ” ์›๋ณธ
    where city = '์„œ์šธ'      --2. ํ–‰์— ๋Œ€ํ•œ ์กฐ๊ฑด ํ•„ํ„ฐ
    group by buseo;          --3. ๋ถ€์„œ๋กœ ๊ทธ๋ฃน ๋‚˜๋ˆ”



select
    count(*), buseo            --4.
from tblInsa                   --1.
    where basicpay >= 2500000  --2. ์—ฌ๊ธฐ์„œ ์กฐ๊ฑด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ ํƒˆ๋ฝ(๋ถ€์„œ ๋ช‡๊ฐœ ์—†์–ด์ง)
    group by buseo;            --3. 




-- having์ ˆ
select
    buseo,
    round(avg(basicpay))    --3. ๋‚˜๋ˆ ์ง„ ๊ทธ๋ฃน๋ณ„๋กœ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ๊ฐ๊ฐ ๊ตฌํ•œ๋‹ค.
from tblInsa                --1. 60๋ช…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    group by buseo;         --2. 60๋ช…์„ ๋Œ€์ƒ์œผ๋กœ > ๋ถ€์„œ๋กœ ๊ทธ๋ฃน์„ ๋‚˜๋ˆˆ๋‹ค. 


select
    buseo,
    round(avg(basicpay))        --4. ๋‚˜๋ˆ ์ง„ ๊ทธ๋ฃน๋ณ„๋กœ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ๊ฐ๊ฐ ๊ตฌํ•œ๋‹ค.
from tblInsa                    --1. 60๋ช…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    where basicpay >= 1500000   --2. 60๋ช…์„ ๋Œ€์ƒ์œผ๋กœ ์กฐ๊ฑด์— ๋งž๋Š” ์ง์›๋งŒ ๋‚จ๊ธด๋‹ค.
        group by buseo;         --3. where์ ˆ์„ ๋งŒ์กฑํ•œ ์ง์›๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ๊ทธ๋ฃน์„ ๋‚˜๋ˆˆ๋‹ค.


-- where์ ˆ์€ ๊ฐœ์ธ์— ๋Œ€ํ•œ ์กฐ๊ฑด์ด๊ธฐ๋•Œ๋ฌธ์— ์ง‘๊ณ„ํ•จ์ˆ˜ ์‚ฌ์šฉX
-- having์ ˆ์— ๊ฐ€๋Šฅ
select
    buseo,
    round(avg(basicpay))                    --4. ๋‚˜๋ˆ ์ง„ ๊ทธ๋ฃน๋ณ„๋กœ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ๊ฐ๊ฐ ๊ตฌํ•œ๋‹ค.
from tblInsa                                --1. 60๋ช…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    group by buseo                          --2. 60๋ช…์„ ๋Œ€์ƒ์œผ๋กœ > ๋ถ€์„œ๋กœ ๊ทธ๋ฃน์„ ๋‚˜๋ˆˆ๋‹ค.
        having avg(basicpay) >= 1500000;    --3. ๊ทธ๋ฃน๋ณ„ ์ง‘๊ณ„ํ•จ์ˆ˜๊ฐ’์„ ์กฐ๊ฑด์œผ๋กœ ํ•„ํ„ฐ๋ง



select
    buseo,
    round(avg(basicpay))                        --5.
from tblInsa                                    --1.
    where basicpay >= 1500000                   --2.
        group by buseo                          --3.
            having avg(basicpay) >= 2200000     --4.
                order by avg(basicpay) desc;    --6.

group by ํ•จ์ˆ˜

    1. rollup()

     - group by ๊ฒฐ๊ณผ์—์„œ ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋ฅผ ๋” ์ž์„ธํ•˜๊ฒŒ ๋ฐ˜ํ™˜
    2. cube()

    - group by ๊ฒฐ๊ณผ์—์„œ ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋ฅผ ๋” ์ž์„ธํ•˜๊ฒŒ ๋ฐ˜ํ™˜
    - rollup() ๋ณด๋‹ค ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ํ‘œํ˜„
    - rollup()์— ๋น„ํ•ด ์ข€ ๋” ๋‹ค์–‘ํ•œ ๊ธฐ์ค€์œผ๋กœ ์ค‘๊ฐ„ ์ง‘๊ณ„ ์ถ”๊ฐ€
    

-- rollup()
select
    buseo,
    jikwi,
    count(*),
    round(avg(basicpay))
from tblInsa
    group by rollup(buseo, jikwi);



select
    buseo,
    jikwi,
    city,
    count(*),
    round(avg(basicpay))
from tblInsa
    group by rollup(buseo, jikwi, city);
    
    
    
--cube()
select
    buseo,
    jikwi,
    count(*),
    round(avg(basicpay))
from tblInsa
    group by cube(buseo, jikwi);




select
    buseo,
    jikwi,
    city,
    count(*),
    round(avg(basicpay))
from tblInsa
    group by cube(buseo, jikwi, city);