Study/database

[database κ³ κΈ‰] μœˆλ„μš° ν•¨μˆ˜ (2023.08.09)

Shinjio 2023. 8. 9. 15:25
λ°˜μ‘ν˜•

 

 

SELECT PRD_ID
     , PRD_NAME
     , PRD_AMT
     , DENSE_RANK() OVER (ORDER BY PRD_AMT DESC) AS κ°€κ²©λŒ€μˆœμœ„
  FROM TB_PRD;

 

μœˆλ„μš°ν•¨μˆ˜ : ν…Œμ΄λΈ”μ˜ ν–‰κ³Ό ν–‰κ°„μ˜ 관계λ₯Ό μ΄μš©ν•΄μ„œ μ˜λ―ΈμžˆλŠ” 데이터λ₯Ό λ½‘λŠ”λ‹€. 

 

  • RANK : μ€‘λ³΅λœ μˆœμœ„ λ‹€μŒ 숫자 κ±΄λ„ˆλœ€
  • DENSE_RANK : μ€‘λ³΅λœ μˆœμœ„ λ‹€μŒ 숫자 κ±΄λ„ˆλ›°μ§€ μ•ŠμŒ
  • ROW_NUMBER : κ³ μœ ν•œ 숫자

 

 

μ‹€ν–‰μˆœμ„œ

 

 

 

인라인뷰λ₯Ό μ΄μš©ν•΄μ„œ 쑰건 λΆ€μ—¬ κ°€λŠ₯

 

SELECT *
    FROM (
            SELECT PRD_ID
                 , PRD_NAME
                 , PRD_AMT
                 , DENSE_RANK() OVER (ORDER BY PRD_AMT DESC) AS κ°€κ²©λŒ€μˆœμœ„
              FROM TB_PRD
        )
 WHERE κ°€κ²©λŒ€μˆœμœ„ <= 5;

 

 

μž„μ‹œ ν…Œμ΄λΈ” 생성 : WITH - AS

인라인뷰가 λ„ˆλ¬΄ κΈΈμ–΄μ§€λ©΄ WITH둜 μ„ μ–Έ ν›„ SELECT μ—μ„œ ν™œμš©

 

PARTITION BY

 

SELECT κ²½κΈ°μž₯ , 승자 , 패자 , 점수차
 , ROW_NUMBER() OVER ( PARTITION BY κ²½κΈ°μž₯ ORDER BY 점수차 DESC ) AS 
RNUM 
FROM μ›”λ“œμ»΅κ²½κΈ°λ‚΄μ—­

 

 

 

그룹별 1λ“±κ³Ό 같은 쑰건 λΆ€μ—¬ν•  λ•Œ ROW_NUMBER, PARTITION BY와 ν•¨κ»˜ 많이 μ‚¬μš©

 

GROUP BYλŠ” μ‹€μ œλ‘œ 행이 쀄어버린닀. 

PARTITION BYλŠ” 행이 쀄지 μ•ŠλŠ”λ‹€. (원본 κ·ΈλŒ€λ‘œ μœ μ§€) 

 

 

SELECT κ²½κΈ°μž₯ , 승자 , 패자 , 점수차
 FROM ( 
        SELECT κ²½κΈ°μž₯ , 승자 , 패자 , 점수차
         , ROW_NUMBER() OVER ( PARTITION BY κ²½κΈ°μž₯ ORDER BY 점수차 DESC ) AS 
        RNUM 
        FROM μ›”λ“œμ»΅κ²½κΈ°λ‚΄μ—­
         ) 
WHERE RNUM = 1;

 

LEAD, LEG 

 

  • LEG : ν˜„μž¬ 데이터 κΈ°μ€€ 이전 데이터 κ°€μ Έμ˜¬ λ•Œ
  • LEAD : ν˜„μž¬ 데이터 κΈ°μ€€ 이후 데이터 κ°€μ Έμ˜¬ λ•Œ

 

(μ’…κ°€, 1, 0)

μ’…κ°€ : κΈ°μ€€

1 : 1개 이전 ν˜Ήμ€ 이후 

0 : DEFAULT 

 

SELECT μ’…λͺ©
 , 일자
 , μ’…κ°€
 , LAG(μ’…κ°€ ,1, 0) OVER(ORDER BY 일자) AS μ „λ‚ λŒ€λΉ„μ’…κ°€μ°¨μ΄
 , μ’…κ°€ - LAG(μ’…κ°€ ,1, 0) OVER(ORDER BY 일자) AS μ „λ‚ λŒ€λΉ„μ’…κ°€μ°¨μ΄
 FROM STOCK 
;

 

 

λ°˜μ‘ν˜•