[SQL] Window Function (Rank)

2023. 4. 16. 17:16·SQL

1. Window Function

 Analytic Function으로도 불러며 행과 행간의 관계를 쉽게 정의할 수 있는 함수들입니다. group by와 비슷하게 데이터를 집계해 주지만 큰 차이점은 데이터 집합의 레벨을 유지한다는 데에 있습니다. 그중 Rank관련 함수에 대해 알아보겠습니다.

데이터 집합의 레벨을 유지하는 window function


2. 사용법

다음과 같이 직원 관련 테이블에서 급여 순위(salary)를 조회할 때,

2-1. dense_rank : 공동 순위가 있을 경우 다음 순위는 밀리지 않고 이어짐

SELECT  name,
        salary,
        dense_rank() over (order by salary desc) as salary_rank
  FROM EMP;

2-2. row_number : 공동 순위가 있더라도 고유한 순위가 매겨짐

SELECT  name,
        salary,
        row_number() over (order by salary desc) as salary_rank
  FROM EMP;

2-3. rank : 공동 순위가 있을 경우 다음 순위는 공동 순위만큼 밀림

SELECT  name,
        salary,
        rank() over (order by salary desc) as salary_rank
  FROM EMP;


3. 응용

3-1. 부서별 급여 1등

SELECT *
    FROM
(SELECT  name,
        department,
        salary,
        rank() over (partition by department order by salary desc) as salary_rank
  FROM EMP) A
 WHERE salary_rank = 1;

3-2. 부서별 급여 1등, 꼴등

SELECT *
    FROM
(SELECT  name,
        department,
        salary,
        rank() over (partition by department order by salary desc) as salary_rank1,
        rank() over (partition by department order by salary ) as salary_rank2
  FROM EMP) A
 WHERE salary_rank1 = 1
    OR salary_rank2 = 1;

3-3. 보너스 순위

SELECT  name,
        department,
        bonus,
        rank() over (order by bonus desc) as bonus_rank
  FROM EMP;

※ 주의 : mysql에서는 위와 같이  null값이 자동으로 후순위로 가지만 oracle에서는 nulls last를 해줘야 null값들이 후순위가 됩니다.

 


https://www.kaggle.com/code/alexisbcook/analytic-functions

 

Analytic Functions

Explore and run machine learning code with Kaggle Notebooks | Using data from San Francisco Open Data

www.kaggle.com

 

'SQL' 카테고리의 다른 글

[Oracle] 튜닝을 위한 간단한 힌트 정리  (0) 2022.03.27
'SQL' 카테고리의 다른 글
  • [Oracle] 튜닝을 위한 간단한 힌트 정리
gunuuu
gunuuu
주로 AI, ML에 관한 글을 씁니다.
  • gunuuu
    gunuuu
    gunuuu
  • 전체
    오늘
    어제
    • 분류 전체보기 (40)
      • AI/ML (11)
        • NLP (8)
        • RAG (1)
      • Pytorch (5)
      • Python (11)
      • SQL (2)
      • Causal Inference (3)
        • DoWhy (1)
      • 일상 (3)
      • 책 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    line_profiler
    대규모언어모델
    onnx
    window function
    bm25
    DetectGPT
    KoAlpaca
    허깅페이스
    미니어처 라이프 서울
    Hybrid search
    DataDistributedParallel
    Chain of Thought
    모델경량화
    DAPT
    cython
    nlp
    크레마S
    인과 추론
    SQL
    인과추론
    DoWhy
    sparse vector
    itertuples
    FAISS
    Tree of Thought
    TAPT
    벡터 db
    Low-Rank Adaptation
    PEFT
    TALLRec
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gunuuu
[SQL] Window Function (Rank)
상단으로

티스토리툴바