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;
'Programming > etc.' 카테고리의 다른 글
@param 어노테이션 사용 이유 (0) | 2023.11.13 |
---|---|
[JAVA] if 조건문 작성 시 마지막 조건을 else if {...}로 마무리 해도 될까? (0) | 2023.08.22 |
푸티(Putty) 기초적인 사용 기록 (0) | 2023.07.13 |
JBWEB000236 : Servlet.service() for servlet jsp threw exception : java.lang.NumberFormatException : For input string : "변수명" 관련에러 (0) | 2023.07.12 |
[ibatis] Parsing error was found in mapping (0) | 2022.12.26 |