본문 바로가기
DataBase

[postgreSQL] GROUP BY, HAVING 절

by 바까 2021. 9. 14.
반응형

GROUP BY절

: SELECT문에서 반환된 행을 그룹으로 나눈다. 각 그룹에 대한 합계, 평균, 카운트 등을 계산할 수 있다.

문법

SELECT COLUMN_1, 집계함수(COLUMN_2) --> GROUP BY 컬럼 기재, 집계함수 사용
FROM TABLE_NAME
GROUP BY COLUMN_1; --> GROUP BY절 기재, N개의 컬럼을 GROUP BY하는 경우 ',' 구분해야 하며 GROUP BY절은 FROM 또는 WHERE절 바로 뒤에 나타나야함

select CUSTOMER_ID		--group by 컬럼인 CUSTOMER_ID를 출력
from payment p 			--PAYMENT체이블을 조회
group by CUSTOMER_ID;	--CUSTOMER_ID기준으로 group BY한다. 
--> CUSTOMER ID 기준 중복이 제거된 유일한 값만 보인다는 뜻

합계 구하기+정렬

SELECT CUSTOMER_ID, SUM(AMOUNT) AS AMOUNT_SUM
FROM payment p 
GROUP BY customer_id 
ORDER BY SUM(AMOUNT) DESC; --거래액이 가장 많은 고객 순으로 출력

카운트 구하기

SELECT STAFF_ID, COUNT(PAYMENT_ID) AS COUNT
FROM payment p 
GROUP BY STAFF_ID;

 


HAVING절

: GROUP BY절과 함께 HAVING절을 사용하여 GROUP BY의 결과를 특정 조건으로 필터링 하는 기능을 한다.

문법

SELECT COLUMN_1, 집계함수(COLUMN_2)
FROM table_NAME
GROUP BY COLUMN_1 -- group by절 기재, N개의 컬럼을 group by하는 경우 콤마로 구분
HAVING 조건식; -- GROUP BY절은 FROM또는 WHERE절 바로 뒤에 나타나야함.
-- HAVING절은 GROUP BY절에 의해 생성된 그룹행의 조건을 설정한다.
-- 반면에 WHERE절은 GROUP BY절이 적용되기 전에 개별 행의 조건을 설정한다.

select CUSTOMER_ID, SUM(AMOUNT) as AMOUNT_SUM
from payment p 
group by customer_id 
having SUM(AMOUNT) > 200;	--group by의 결과 값 중에서 SUM(AMOUNT)가 200을 초과하는 값을 출력
반응형

'DataBase' 카테고리의 다른 글

[postgreSQL] INTERSECT, EXCEPT  (0) 2021.09.14
[postgreSQL][집합연산자] UNION, UNION ALL  (0) 2021.09.14
[postgreSQL] NATURAL JOIN  (0) 2021.09.14
[postgreSQL] CROSS JOIN  (0) 2021.09.14
[postgreSQL] FULL OUTER JOIN  (0) 2021.09.14

댓글