[SQL/DB] 집계 데이터

ack·2021년 6월 17일
0

SQL/DB

목록 보기
3/8
post-thumbnail

ch03 JOIN과 집계데이터 - 집계데이터

08. GROUP BY절

  • SELECT문에서 반환된 행을 그룹으로 나눈다. 각 그룹에 대한 합계, 평균, 카운트 등을 계산
SELECT A.STAFF_ID,
	B.STAFF_ID,
	B.FIRST_NAME,
	B.LAST_NAME,
	COUNT(A.PAYMENT_ID) AS COUNT
FROM PAYMENT A,
	STAFF B
WHERE A.STAFF_ID = B.STAFF_ID
GROUP BY A.STAFF_ID,
	B.STAFF_ID;

09. HAVING절

  • GROUP BY절과 함꼐 HAVING절을 이용하여 GROUP BY의 결과를 특정 조건으로 필터링
SELECT CUSTOMER_ID,
	SUM(AMOUNT) AS AMOUNT
FROM PAYMENT
GROUP BY CUSTOMER_ID
HAVING SUM(AMOUNT) > 200
ORDER BY AMOUNT DESC;

-- having절은 group by
SELECT A.CUSTOMER_ID ,
	B.EMAIL ,
	SUM(A.AMOUNT) AS AMOUNT
FROM PAYMENT A,
	CUSTOMER B
WHERE A.CUSTOMER_ID = B.CUSTOMER_ID
GROUP BY A.CUSTOMER_ID,
	B.EMAIL
HAVING SUM(A.AMOUNT) > 200

10. GROUPING SET절

  • 여러개의 UNION ALL 을 이용한 SQL과 같은 결과를 도출할 수 있음.
SELECT BRAND,
	SEGMENT,
	SUM(QUANTITY)
FROM SALES
GROUP BY GROUPING SETS((BRAND,SEGMENT), (BRAND), (SEGMENT), ());

-- union all 로 활용할 경우엔 같은 테이블을 4번 조회해서 union all해야됨
SELECT GROUPING(BRAND) GROUPING_BRAND,
	GROUPING(SEGMENT) GROUPING_SEGMENT,
	BRAND SEGMENT,
	SUM(QUANTITY)
FROM SALES
GROUP BY GROUPING SETS((BRAND,SEGMENT), (BRAND), (SEGMENT), ());

GROUPING() : 해당 컬럼이 집계에 사용되었으면 0, 그렇지 않으면 1을 리턴.

11. ROLL UP 절

  • 지정된 GROUPING 컬럼의 소계를 생성하는데 사용. 간단한 문법으로 소계 출력 가능
SELECT BRAND,
	SEGMENT,
	SUM(QUANTITY)
FROM SALES
GROUP BY ROLLUP(BRAND, SEGMENT)
ORDER BY BRAND, SEGMENT
-- group by + rollup절에 맨앞에 쓴 컬럼 기준의 합계도 나오고 + 전체 합계도 나왔다

SELECT BRAND,
	SEGMENT,
	SUM(QUANTITY)
FROM SALES
GROUP BY SEGMENT,
	ROLLUP (BRAND)
ORDER BY BRAND,
	SEGMENT
-- 부분 rollup시 전체 합게는 구하지 않는다

11. CUBE

  • 지정도니 GROUPING 컬럼의 다차원 소계를 생성하는데 사용
  • 간단한 문법으로 다차원 소계 출력 가능
  • CUBE(c1, c2, c3) = grouping sets((c1, c2, c3), (c1, c2), (c1 c3), (c2, c3), (c1), (c2), (c3))
SELECT BRAND,
	SEGMENT,
	SUM(QUANTITY)
FROM SALES
GROUP BY CUBE(BRAND, SEGMENT)
ORDER BY BRAND,
	SEGMENT
-- cube = group by 절 합께 + brands별 + segment별 + 전체합게

SELECT BRAND,
	SEGMENT,
	SUM(QUANTITY)
FROM SALES
GROUP BY BRAND,
	CUBE(SEGMENT)
ORDER BY BRAND,
	SEGMENT

profile
아자 (*•̀ᴗ•́*)و

0개의 댓글