본문 바로가기
IT/SQLP

[SQL 기초강의] 7강. Group by, HAVING, ROLLUP, CUBE, GROUPING SETS

by by디디 2022. 5. 4.
반응형

2022.05.03 - [IT/SQLP] - [SQL 기초강의] 6강. 데이터 형변환

 

[SQL 기초강의] 6강. 데이터 형변환

2022.04.26 - [IT/SQLP] - [SQL 기초강의] 5강. SQL 함수 (Function) [SQL 기초강의] 5강. SQL 함수 (Function) 2022.04.25 - [IT/SQLP] - [SQL 기초강의] 4강. WHERE [SQL 기초강의] 4강. WHERE 2022.04.22 - [IT..

zaop.tistory.com

 

SQL문의 Group by, HAVING, ROLLUP, CUBE, GROUPING SETS 에 대해서 알아보기

- SQL에서 데이터를 그룹 별로 추출하고 싶을 때 사용하는 예약어

 

* SYNTAX

 SELECT column_name [, aggregate_column_name]
   FROM table_name
  WHERE condition
 GROUP BY [ROLLUP | CUBE | GROUPING SETS ] group_by_expression
HAVING filter_expression

 

* 그룹함수

Function             
AVG AVG(salary) salary평균
MAX MAX(salary) salary의 최대값 
MIN MIN(salary) salary의 최소값 
SUM SUM(salary)  salary
COUNT COUNT(comm_pct)
COUNT(*)
Comm_pctnot null인 개수
전체 Row의 개수

 

* 사용 방법

1. GROUP BY 

SELECT CUST_NO, COUNT(*) ORD_CNT
  FROM TB_ORD
 GROUP BY CUST_NO
  • GROUP BY절은 집합의 집계된 결과를 출력할 때 사용함
  •  
    WHERE절과 ORDER BY 절 사이에 위치

 

2. HAVING

SELECT CUST_NO, COUNT(*) ORD_CNT
  FROM TB_ORD
 GROUP BY CUST_NO
HAVING COUNT(*) > 2
  • HAVING절은 집계된 결과를 FILTER할 때 사용함
  • GROUP BY된 결과 중 그룹함수 관련 조건(HAVING)에 맞는 결과만 조회
  • 위 예제에는 주문 건 중 2건 이상을 주문한 고객번호와 주문건수를 조회하는 SQL

 

3. ROLLUP

SELECT CUST_NO
     , SUBSTR(ORD_DTTM,1,6) ORD_DTTM
     , SUM(TOT_ORD_AMT) SUM_ORD_AMT
  FROM TB_ORD A
 WHERE ORD_DTTM LIKE '201901%'
   AND CUST_NO IS NOT NULL
 GROUP BY ROLLUP(CUST_NO, SUBSTR(ORD_DTTM,1,6))
 ORDER BY CUST_NO;
  • ROLLUP은 집계된 집합의 소계와 총계를 확인 할 때 사용함
  •  
    명시한 표현식 수와 순서에 따라 집계한 결과가 반환 됨(n + 1 Level) – 오른쪽에서 왼쪽 순
  •  
    위 예제에는 ‘201901고객 주문금액의 집계,고객별 소계,총계 값을 확인하는 SQL

4. CUBE

SELECT CUST_NO
     , SUBSTR(ORD_DTTM,1,6) ORD_DTTM
     , SUM(TOT_ORD_AMT) SUM_ORD_AMT
  FROM TB_ORD A
 WHERE ORD_DTTM LIKE '201901%'
   AND CUST_NO IS NOT NULL
 GROUP BY CUBE(CUST_NO, SUBSTR(ORD_DTTM,1,6))
 ORDER BY CUST_NO;
  • CUBEROLLUP과 유사하나 2n 제곱 값 만큼 반환 함
  •  
    명시한 표현식 수와 순서에 따라 집계한 결과가 반환 됨(n + 1 Level)
  •  
    위 예제에는 ‘201901 고객 주문금액의 집계,고객별 소계,’201901 소계,총계 값을 확인하는 SQL

 

5. GROUPING SETS

SELECT CUST_NO
     , SUBSTR(ORD_DTTM,1,6) ORD_DTTM
     , SUM(TOT_ORD_AMT) SUM_ORD_AMT
  FROM TB_ORD A
 WHERE ORD_DTTM LIKE '201901%'
   AND CUST_NO IS NOT NULL
 GROUP BY GROUPING SETS(CUST_NO, SUBSTR(ORD_DTTM,1,6))
 ORDER BY CUST_NO;
  • GROUPING SETS는 그룹 쿼리이기는 하나 UNION ALL기능이 섞여 있음
  •  
    GROUP BY expression UNION ALL GROUP BY expression의 결과와 같음
  •  
    위 예제에는 ‘201901고객별 주문 금액과 ‘201901주문 소계 값을 출력

 

2022.04.05 - [IT/SQLP] - [SQLP] 문제집 풀이 ( 1-3 )

 

[SQLP] 문제집 풀이 ( 1-3 )

1번. 제어어(DCL) 찾기 ​ ※외우기! DML : 데이터 조작어 SELECT : 데이터 조회 INSERT : 데이터 입력 UPDATE : 데이터 변경 DELETE : 데이터 삭제 ​ DDL : 데이터 정의어 / DB 객체 (TABLE, INDEX, FUNCTION..

zaop.tistory.com

 

 

반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

댓글