22강 SQL이 뭐지? PostgreSQL GROUP BY
PostgreSQL
SQL이 뭐지? 22강 시작합니다.
이번 강의에서는
▶ PostgreSQL GROUP BY clause
에 대해서 알아보겠습니다.
Introduction to PostgreSQL GROUP BY clause
GROUP BY 절은 SELECT 문에서 반환되는 행을 그룹으로 나눕니다. 각 그룹에 대해 SUM()과 같은 집계 함수를 적용하여 항목의 합계를 계산하거나 COUNT()를 적용하여 그룹의 항목 수를 가져올 수 있습니다.
다음 문은 GROUP BY 절의 기본 구문을 보여줍니다.
SELECT
column_1,
column_2,
...,
aggregate_function(column_3)
FROM
table_name
GROUP BY
column_1,
column_2,
...;
다음 구문에서:
● 먼저 그룹화할 열(예: 열 1 및 열 2)과 집계 함수를 적용할 열(열 3)을 선택합니다.
● 둘째, 그룹화할 열을 GROUP BY 절에 나열합니다.
SELECT문은 행을 GROUP BY 절에 지정된 열의 값으로 나누고 각 그룹에 대한 값을 계산합니다.
GROUP BY 절과 함께 SELECT 문의 다른 절을 사용할 수 있습니다.
PostgreSQL은 FROM 절과 WHERE 절 뒤에 그리고 SELECT, DISTINCT, ORDER BY, LIMIT 절 앞에 GROUP BY 절을 평가합니다.
영문 evaluates로 표현되는 '평가하다'가 이해가 잘 안될 수도 있습니다. DBMS가 SQL을 해석하는 순서로 이햐하시면 될 것 같습니다. |
DBMS가 쿼리를 평가하는 순서 도식화
PostgreSQL GROUP BY clause examples
DVDRENTAL 샘플 데이터베이스에 있는 payment 테이블을 살펴봅시다.
1) Using PostgreSQL GROUP BY without an aggregate function example
GROUP BY 절은 집계 함수를 적용하지 않고 사용할 수 있습니다. 다음 쿼리는 payment 테이블에서 데이터를 가져와 고객 ID별로 결과를 그룹화합니다.
SELECT
customer_id
FROM
payment
GROUP BY
customer_id;
이 경우 GROUP BY는 결과 집합에서 중복 행을 제거하는 DISTINCT 절처럼 작동합니다.
2) Using PostgreSQL GROUP BY with SUM() function example
GROUP BY 절은 집합 함수와 함께 사용될 때 유용합니다.
예를 들어, 각 고객이 지불한 총금액을 선택하려면 GROUP BY 절을 사용하여 지불 테이블의 행을 고객 ID별로 그룹화된 그룹으로 나눕니다. 각 그룹에 대해 SUM() 함수를 사용하여 총금액을 계산합니다.
다음 쿼리는 GROUP BY 절을 사용하여 각 고객이 지불한 총 금액을 가져옵니다.
SELECT
customer_id,
SUM (amount)
FROM
payment
GROUP BY
customer_id;
GROUP BY 절은 결과 집합을 고객 ID별로 정렬하고 동일한 고객에 속하는 양을 합산합니다. customer_id가 변경될 때마다 반환된 결과 집합에 행이 추가됩니다.
다음 문에서는 ORDER BY 절과 GROUP BY 절을 사용하여 그룹을 정렬합니다.
SELECT
customer_id,
SUM (amount)
FROM
payment
GROUP BY
customer_id
ORDER BY
SUM (amount) DESC;
3) Using PostgreSQL GROUP BY clause with the JOIN clause
다음 구문은 GROUP BY 절과 INNER JOIN 절을 사용하여 각 고객이 지불한 총금액을 얻습니다.
이전 예제와 달리 이 쿼리는 결제 테이블을 고객 테이블과 결합하고 고객을 이름으로 그룹화합니다.
SELECT
first_name || ' ' || last_name full_name,
SUM (amount) amount
FROM
payment
INNER JOIN customer USING (customer_id)
GROUP BY
full_name
ORDER BY amount DESC;
4) Using PostgreSQL GROUP BY with COUNT() function example
각 직원이 처리한 결제 트랜잭션 수를 찾으려면 결제 테이블의 행을 staff_id 열의 값으로 그룹화하고 COUNT() 함수를 사용하여 트랜잭션 수를 가져옵니다.
SELECT
staff_id,
COUNT (payment_id)
FROM
payment
GROUP BY
staff_id;
GROUP BY 절은 결제의 행을 그룹으로 나누고 staff_id 열의 값을 기준으로 그룹화합니다. 각 그룹에 대해 COUNT() 함수를 사용하여 행 수를 반환합니다.
5) Using PostgreSQL GROUP BY with multiple columns
다음 예제에서는 GROUP BY 절에 여러 열을 사용합니다.
SELECT
customer_id,
staff_id,
SUM(amount)
FROM
payment
GROUP BY
staff_id,
customer_id
ORDER BY
customer_id;
이 예에서 GROUP BY 절은 지불 테이블의 행을 customer_id 및 staff_id 열의 단위로 나눕니다.
(customer_id, staff_id)의 각 그룹에 대해 SUM()은 총 금액을 계산합니다.
6) Using PostgreSQL GROUP BY clause with date column
payment_date는 타임스탬프 열입니다. 날짜별로 결제를 그룹화하려면 DATE() 기능을 사용하여 타임스탬프를 먼저 날짜로 변환한 다음 결과 날짜별로 결제를 그룹화합니다.
SELECT
DATE(payment_date) paid_date,
SUM(amount) sum
FROM
payment
GROUP BY
DATE(payment_date);
이번 강의에서는 PostgreSQL GROUP BY 절을 사용하여 행을 그룹으로 나누고 각 그룹에 집계 함수를 적용하는 방법을 배웠습니다.
수고하셨습니다.
다음 강의에서 뵙겠습니다.
본 강의는 PostgreSQL Tutorial을 참조합니다.
실습용 테이블에 대해서는 3강을 참조하세요.
Do it! SQL을 찾아 주셔서 감사합니다. 여러분의 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
24강 SQL이 뭐지? PostgreSQL INTERSECT (2) | 2022.12.19 |
---|---|
23강 SQL이 뭐지? PostgreSQL UNION (1) | 2022.12.19 |
21강 SQL이 뭐지? PostgreSQL NATURAL JOIN (2) | 2022.12.19 |
20강 SQL이 뭐지? PostgreSQL Cross Join (2) | 2022.12.19 |
19강 SQL이 뭐지? PostgreSQL FULL OUTER JOIN (3) | 2022.12.19 |
댓글