๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€/Oracle

[ex24] rank

ex24.rank

 

์ˆœ์œ„ํ•จ์ˆ˜
    - rownum์˜ ์‚ฌ์šฉ์„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์šฉ๋„๋กœ ๊ตฌํ˜„ํ•ด๋†“์€ ํ•จ์ˆ˜
    
    1. rank() over()
        - rank() over(order by ์ปฌ๋Ÿผ๋ช… [asc|desc])
        - ์ˆœ์œ„ ๋ถ€์—ฌ์‹œ, ์ค‘๋ณต๊ฐ’์ด ๋ฐœ์ƒํ•˜๋ฉด ๋™์ผํ•œ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ์ค‘๋ณต๊ฐ’์˜ ๊ฐœ์ˆ˜๋งŒํผ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ํ•œ๋‹ค.
        - 1 1 > 3
    
    2. dense_rank() over()
        - dense_rank() over(order by ์ปฌ๋Ÿผ๋ช… [asc|desc])
        - ์ˆœ์œ„ ๋ถ€์—ฌ์‹œ, ์ค‘๋ณต๊ฐ’์ด ๋ฐœ์ƒํ•˜๋ฉด ๋™์ผํ•œ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ๊ทธ ๋’ค์˜ ์ˆœ์œ„๋Š” ๊ฑด๋„ˆ๋›ฐ๊ธฐ ์—†์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋ถ€์—ฌํ•œ๋‹ค.
        - 1 1 > 2
        
    3. row_number() over()
        - row_number() over(order by ์ปฌ๋Ÿผ๋ช… [asc|desc])
        - ์ˆœ์œ„ ๋ถ€์—ฌ์‹œ, ์ค‘๋ณต๊ฐ’๊ณผ ์ƒ๊ด€์—†์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋ถ€์—ฌ
        - ์ง์ ‘ rownum์„ ์‚ฌ์šฉํ•œ ๊ฒฐ๊ณผ์™€ ๋™์ผ
        - 1 2 3

 

-- ๊ธ‰์—ฌ์ˆœ์œผ๋กœ ๊ฐ€์ ธ์˜ค์‹œ์˜ค. + ์ˆœ์œ„
-- rownum
select a.*, rownum from   (select
                    name, buseo, basicpay
                from tblInsa
                    order by basicpay desc) a;

--rank over
select 
    name, buseo, basicpay,
    rank() over(order by basicpay desc) as rnum 
from tblInsa;

--dense_rank over
select 
    name, buseo, basicpay,
    dense_rank() over(order by basicpay desc) as rnum 
from tblInsa;

--row_number over
select 
    name, buseo, basicpay,
    row_number() over(order by basicpay desc) as rnum 
from tblInsa;




-- ๊ธ‰์—ฌ 5์œ„
select 
    name, buseo, basicpay,
    row_number() over(order by basicpay desc) as rnum --3.
from tblInsa --1.
    where (row_number() over(order by basicpay desc)) = 5 ; --2. (์•„์ง 3 ์‹คํ–‰ ์ „์ด๋ผ rnum ์กฐ๊ฑด ๋ชป์”€)
    

--์ˆœ์œ„ํ•จ์ˆ˜ ์“ฐ๋ ค๋ฉด ์„œ๋ธŒ์ฟผ๋ฆฌ ํ•„์ˆ˜
select * from (select 
                name, buseo, basicpay,
                row_number() over(order by basicpay desc) as rnum 
            from tblInsa)
                where rnum = 5;

--๊ฑด๋„ˆ๋›ด ์ˆœ์œ„๋Š” ์•ˆ๋‚˜์˜ด
select * from (select 
                name, buseo, basicpay,
                rank() over(order by basicpay desc) as rnum 
            from tblInsa)
                where rnum = 9;

update tblInsa set sudang = 200000 where name = '์ด๋ฏธ์ธ';

--2์ฐจ ์ •๋ ฌํ•˜๋ฉด ์ˆ˜๋‹น์ˆœ์œผ๋กœ ๋˜ ์ •๋ ฌ > 8,8 > 8,9 (but ์ˆ˜๋‹น๋„ ๋˜‘๊ฐ™์œผ๋ฉด ๋“ฑ์ˆ˜ ๊ฐ™์Œ)
select 
    name, buseo, basicpay, sudang,
    rank() over(order by basicpay desc, sudang desc) as rnum 
from tblInsa;

๊ทธ๋ฃน๋ณ„ ์ˆœ์œ„ ๊ตฌํ•˜๊ธฐ
    - ์ˆœ์œ„ ํ•จ์ˆ˜ + group by

-- ๊ธ‰์—ฌ ์ˆœ์œ„
select
    name, buseo, basicpay
from tblInsa;

select
    name, buseo, basicpay,
    dense_rank() over(order by basicpay desc) as rnum
from tblInsa;

-- ๋ถ€์„œ๋ณ„(๊ธ‰์—ฌ ์ˆœ์œ„)
select
    name, buseo, basicpay,
    dense_rank() over(partition by buseo order by basicpay desc) as rnum
from tblInsa;

'ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€ > Oracle' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ex26] Hierarchical Query  (0) 2023.03.30
[ex25] with  (0) 2023.03.30
[ex23] pseudo, rownum  (0) 2023.03.26
[ex22] alter  (0) 2023.03.26
[ex21] union  (0) 2023.03.26