개발 1도 모르는 사람

[Oracle & SQL] Function (함수)(3) 본문

Oracle & SQL/SQL

[Oracle & SQL] Function (함수)(3)

지구젤리귀여워 2023. 10. 13. 10:42
728x90

이번글은 나도 딱 한번 써보았고 이해하기도 어려운 내용을 일단 담아본다.

굉장히 어렵다고 생각한 부분이라 나중에 하면서 앎을 거듭하게 될때 수정할 듯 하다.

 

 

WINDOW : 
  
      SQL 에서 사용되는 분석 함수
            결과 집합 내에서 행의 순서와 관련된 계산을 수행할 수 있음  
            집계, 순위, 평균, 합계 등을 계산할 때 유용
      데이터를 파티션 별로 분할하고 순서를 정의한 다음 각 파티션 내에 계산을 수행
      <윈도우함수>(<표현식>) OVER (
            PARTITION BY <파티션 열>
            ORDER BY <정렬 열>
            ROWS BETWEEN <시작 행> AND <끝 행>
    
      <윈도우 함수> : 사용할 윈도우 함수 작성
                      ex) SUM, AVG, RANK 등
      <표현 식> : 계산을 수행할 열 또는 식
      PARTITION BY : 데이터를 파티션으로 나누느데 사용할 열을 지정
      ORDER BY : 각 파티션 내에서 행 순서를 정의하는데 사용할 열을 지정
      ROWS BETWEEN : 계산을 수행할 행의 범위를 정의하는데 사용
      
    코드예제)
          SELECT order_id, order_date, total_price,
          SUM(total_price) OVER (ORDER BY order_date) AS OD    -- (ORDER BY order_date) 을 기준으로 SUM(total_price)
          FROM orders;
          --SUM(total_price) OVER (ORDER BY order_date) AS OD; -- 이 부분이 윈도우 함수 
          --이 함수는 order_date를 기준으로 각 주문의 총 가격을 누적한 값을 반환 한 것
          --이 결과 집합에는 order_id, order_date, total_price, OD 열이 포함
          --각 주문에 대한 누적 가격을 게산할 수 있음

  RANK 함수 : 
          동일한 값이 있는 경우 동일한 순위 부여
          동일한 값이 여러 번 나타나면 동일한 순위가 여러번 반복
          예를들어 동일한 값을 가진 두 번재와 세 번재 행에 둘 다 2위 할당
          결과 집합에서 중간에 순위를 건너뛸 수 있음
      
    코드예제 )
        SELECT order_id, order_date, total_price,
        RANK() OVER (PARTITION BY <파티션 열> ORDER BY order_date) AS OD   

     -- (PARTITION BY <파티션 열> ORDER BY order_date) 기준으로 랭크를 매김
        FROM orders;

  RANK() ROW_NUMBER() 함수 : 
           결과 집합의 행에 순위를 할당하는데 사용
           동일한 값이 있더라도 각 행에 고유한 순위를 부여
           동일한 값이 있는 경우에도 각 행에 대해 중복되지 않는 순위를 할당
           예를 들어 동일한 값을 가진 두 번째와 세 번째 행에 대해 각각 2위와 3위 할당
           결과 집합에서 순서는 항상 연속적


  ROWNUM : 데이터베이스에서 사용할 수 있는 가상 열 중 하나
           검색 결과 집합의 각 행에 할당된 고유 번호를 나타냄
           결과 집합의 특정 행을 선택하거나 행에 번호를 할당하는데 사용

    특징  : 검색 결과 집합을 처리하는 동안 생성됨
            결과 집합에 대한 각 행에 할당
            1부터 시작하여 각 행에 연속된 정수 값을 부여
            원하는 행을 선택하거나 행에 일련번호를 할당할 수 있지만
            결과를 정렬하거나 분할하는 작업에 영향을 주진 않음