- 기본적으로 NULL 값을 포함하며, 중복된 값을 포함합니다. - 이를 방지하려면 DISTINCT를 사용합니다. - 예를 들어, 테이블의 특정 열의 값을 계산하거나 테이블의 전체 행 수를 계산하는 데 사용할 수 있습니다.
-- 구문1 : 테이블의 전체 행 수를 계산합니다. (NULL 값을 포함하여 중복된 값을 모두 포함합니다.)
SELECT COUNT(*)
FROM TABLE1;
-- 구문2 : 이 구조는 특정 열에서 NULL이 아닌 값을 계산합니다.
SELECT COUNT(column_name)
FROM TABLE1;
-- 구문3 : 이 구조는 특정 열에서 중복되지 않은 값을 계산합니다. NULL 값을 제외합니다.
SELECT COUNT(DISTINCT column_name)
FROM TABLE1;
-- 구문4 : 이 구조는 특정 열에서 중복되지 않은 값을 계산합니다. NULL 값을 제외하고, 해당 열을 기준으로 그룹화합니다.
SELECT COUNT(DISTINCT column_name), column_name
FROM TABLE1
GROUP BY column_name;
-- 구문5 : 이 구조는 특정 열에서 중복되지 않은 값을 계산합니다. NULL 값을 제외하고, 해당 열을 기준으로 그룹화하고, 해당 열의 개수가 40보다 큰 경우 필터링합니다.
SELECT COUNT(DISTINCT column_name), column_name
FROM TABLE1
GROUP BY column_name
HAVING COUNT(colmn_name) > 40;
- 테이블에서 ‘선택한 열의 모든 값의 합을 그 열의 행의 개수로 나눈 값을 반환’하는 함수입니다. - DISTINCT 중복 제거 사용 가능
-- Syntax
AVG([DISTINCT] column)
-- 구문 1 : 이 쿼리는 payment 테이블의 amount 열의 평균 값을 계산합니다.
SELECT AVG(amount)
FROM payment;
-- 구문 2 : 이 쿼리는 payment 테이블의 amount 열의 평균 값을 계산하며, 중복 값을 제외합니다.
SELECT AVG(DISTINCT amount)
FROM payment;
-- 구문 3 : 이 쿼리는 payment 테이블의 amount 열의 평균 값을 계산하고, 출력을 소수점 이하 2자리까지, 소수점 이전 10자리까지의 최대 자릿수로 지정합니다.
SELECT AVG(amount)::numeric(10,2)
FROM payment;
-- 구문 4 : 이 쿼리는 payment 테이블의 amount 열의 평균 값을 계산하며, 중복 값을 제외하고 amount 열을 기준으로 결과를 그룹화합니다.
SELECT AVG(DISTINCT amount), amount
FROM payment
GROUP BY amount;
-- 구문 5 : 그룹 조건절 : 이 쿼리는 payment 테이블의 amount 열의 평균 값을 계산하며, 중복 값을 제외하고 amount 열을 기준으로 결과를 그룹화합니다. 그 후, 평균 금액이 40보다 큰 행만 결과로 필터링합니다.
SELECT AVG(DISTINCT amount), amount
FROM payment
GROUP BY amount
HAVING AVG(amount) > 40;
- 테이블의 ‘특정 열에서 가장 큰 값을 반환’하는 함수입니다. - DISTINCT 중복 제거 사용 불가
💡 MIN 함수
- 테이블의 ‘특정 열에서 가장 작은 값을 반환’하는 함수입니다. - DISTINCT 중복 제거 사용 불가
-- 기본 구문
MAX(expression);
-- 기본 구문
MIN(expression);
-- 구조 1 : payment 테이블의 amount 열에서 가장 큰 값을 찾기 위해 MAX 집계 함수를 사용합니다.
SELECT MAX(amount)
FROM payment;
-- 구조2 : payment 테이블의 amount 열에서 가장 큰 값을 찾기 위해 MAX 집계 함수를 사용합니다. 그리고 결과는 amount 열로 그룹화됩니다.
SELECT MAX(amount), amount
FROM payment
GROUP BY amount;
-- 구조3 : payment 테이블의 amount 열에서 가장 큰 값을 찾기 위해 MAX 집계 함수를 사용합니다. 그리고 결과는 amount 열로 그룹화되고 평균 amount가 40보다 큰 그룹만 필터링됩니다.
SELECT MAX(amount), amount
FROM payment
GROUP BY amount
HAVING AVG(amount) > 40;
6. ARRAY_AGG 함수
💡 ARRAY_AGG 함수 - 특정 컬럼의 그룹화된 값들을 배열 형태로 반환하는 함수입니다. 이 함수를 사용하면 여러 행을 하나의 배열로 묶어서 조회할 수 있습니다
ARRAY_AGG(expression [ORDER BY [sort_expression {ASC | DESC}], [...])
SELECT category, ARRAY_AGG(name) as items
FROM table_name
GROUP BY category;
SELECT STRING_AGG(name, ', ') as all_names
FROM employees;
| all_names |
|---------------------|
| John, Jane, Mike, Ed |
4) 집계함수 종류 - 더 알아보기
1. 함수 요약
집계 함수
설명
GREATEST
주어진 값 중 가장 큰 값을 반환합니다.
LEAST
주어진 값 중 가장 작은 값을 반환합니다.
COALESCE
NULL이 아닌 첫 번째 인수를 반환합니다.
2. GREATEST 함수
💡 GREATEST 함수 - 주어진 값 중 가장 큰 값을 반환하는 함수입니다.
- 예를 들어, GREATEST(2, 4, 6)는 6을 반환합니다.
-- 테이블 구조
CREATE TABLE ranks (
user_id INT PRIMARY KEY,
rank_1 int4 NOT NULL,
rank_2 int4 NOT NULL,
rank_3 int4 NOT NULL
);
-- 테이블 데이터 생성
INSERT INTO ranks
VALUES
(1, 6, 3, 5),
(2, 2, 8, 5),
(3, 5, 9, 8);
-- rank_1, rank_2, rank_3 중 가장 큰 값을 반환
SELECT
user_id,
GREATEST (rank_1, rank_2, rank_3) AS largest_rank
FROM
ranks;
반환 결과
user_id
largest_rank
1
6
2
8
3
9
3. LEAST 함수
💡 LEAST 함수 - 주어진 값 중 가장 작은 값을 반환하는 함수입니다.
- 예를 들어, LEAST(2, 4, 6)는 2를 반환합니다.
-- 테이블 구조
CREATE TABLE ranks (
user_id INT PRIMARY KEY,
rank_1 int4 NOT NULL,
rank_2 int4 NOT NULL,
rank_3 int4 NOT NULL
);
-- 테이블 데이터 생성
INSERT INTO ranks
VALUES
(1, 6, 3, 5),
(2, 2, 8, 5),
(3, 5, 9, 8);
-- rank_1, rank_2, rank_3 중 가장 작은 값을 반환
SELECT
user_id,
LEAST (rank_1, rank_2, rank_3) AS lowest_rank
FROM
ranks;
수행결과
user_id
lowest_rank
1
3
2
2
3
5
4. COALESCE 함수
💡 COALESCE 함수
- SQL에서 둘 이상의 표현식 중에서 NULL 값을 반환하지 않는 첫 번째 표현식을 반환합니다. 만약 모든 표현식이 NULL 값을 반환한다면, COALESCE 함수는 NULL 값을 반환합니다.