Q.

SELECT 조회를 수행하면서 조회 결과로 출력되는 데이터집합의 총 ROW수를 어떻게 구해야할까? 

 

 

A.

  • 다른 컬럼을 조회하면서 동시에 결과 집합의 총 행 수를 구하려면 COUNT() 함수와 윈도우 함수를 함께 사용할 수 있다. 
SELECT
    column1,
    column2,
    COUNT(*) OVER () AS total_rows
FROM
    your_table
WHERE
    your_condition;

 

 

  • your_table은 대상 테이블이고, your_condition은 원하는 행을 선택하기 위한 조건이다. 
  • 이 쿼리는 your_table에서 your_condition을 만족하는 각 행에 대해 column1과 column2를 조회하면서, 동시에 전체 행 수를 나타내는 total_rows를 반환한다. 

 

 

 

 


 

 

 

 

COUNT(*) OVER () 란? 


  • COUNT(*) OVER ()는 SQL에서 사용되는 윈도우 함수(Window Function) 중 하나로, 전체 결과 집합의 총 행 수를 각 행에 포함된 결과로 반환하는데 사용된다. 
  • 이 함수는 각 행에 동일한 값을 부여하며, 그 값은 전체 결과 집합의 행 수다.
  • 즉, COUNT(*)는 각 행이 속한 전체 결과 집합의 행 수를, OVER ()는 윈도우 함수가 전체 결과 집합에 대해 적용되도록 지정한다.

 

 

 

 


 

 

 

 

그 외의 윈도우 함수(Window Function)


 

  • SQL에서 사용되는 윈도우 함수는 다양하며, 데이터를 파티션별로 나누고 정렬된 순서대로 처리하는데 사용된다. 

 

 

 

ROW_NUMBER(): 결과 집합 내에서 각 행에 대한 순서 번호를 할당합니다.
SELECT
    column1,
    column2,
    ROW_NUMBER() OVER (ORDER BY some_column) AS row_num
FROM
    your_table;



 

 

RANK(): 결과 집합 내에서 값이 동일한 행을 하나의 등급으로 묶어 순서 번호를 할당합니다. 같은 값이 여러 번 나타날 경우 같은 등급이 부여됩니다.
SELECT
    column1,
    column2,
    RANK() OVER (ORDER BY some_column) AS rank_num
FROM
    your_table;



 

 

DENSE_RANK(): RANK()와 비슷하지만, 같은 값이 여러 번 나타날 경우 중복된 등급이 부여되지 않습니다.
SELECT
    column1,
    column2,
    DENSE_RANK() OVER (ORDER BY some_column) AS dense_rank_num
FROM
    your_table;

 

 

 

SUM() OVER(): 결과 집합 내의 각 행에 대해 누적 합계를 계산합니다.
SELECT
    column1,
    column2,
    SUM(column2) OVER (ORDER BY some_column) AS cumulative_sum
FROM
    your_table;




 

AVG() OVER(): 결과 집합 내의 각 행에 대해 평균을 계산합니다.

 

SELECT
    column1,
    column2,
    AVG(column2) OVER (ORDER BY some_column) AS average
FROM
    your_table;



 

 

LEAD(): 현재 행 다음에 나오는 값을 가져옵니다.
SELECT
    column1,
    column2,
    LEAD(column2) OVER (ORDER BY some_column) AS next_value
FROM
    your_table;

 

 

 

LAG(): 현재 행 이전에 나오는 값을 가져옵니다.
SELECT
    column1,
    column2,
    LAG(column2) OVER (ORDER BY some_column) AS previous_value
FROM
    your_table;



 

 

 

 

 

 

 

 

+ Recent posts