반응형
지난 시간에는 SQL의 데이터 조작 언어(DML) 중에서 GROUP BY에 대해 알아보았습니다. 오늘은 이 GROUP BY를 사용하는 이유 중의 하나인 GROUP BY를 했을 때만 사용 가능한 함수에 대해 알아볼까 합니다.
2020/09/23 - [개발 창고/데이터베이스 개발] - [SQL] GROUP BY란? - 기본편
지난 시간처럼 활용 예를 먼저 들어보면, 참고로 그룹 함수는 DBMS별로 가능/불가능한 함수가 있으니 이점 유의하여 주시길 바랍니다.
- 멜론 차트를 뽑고 싶습니다. (→ 음원별 스트리밍 횟수 내림차순)
- 판매된 상품 중 베스트 상품을 알고 싶습니다. (→ 상품별 주문 수량 내림차순)
- 자유게시판 게시글 목록에 코멘트 개수랑 같이 보여주세요. (→ 게시글 별 코멘트 개수)
- 지역별 부동산 매물 수를 알고 싶습니다. (→ 지역별 매물의 개수)
이전 글을 보신 분이라면 아실 수 있겠지만, 각각의 해석 부분의 글자 굵기가 "oo별"에서 수량 쪽으로 변경되었음을 아실 수 있을 겁니다. 이처럼, 그룹 함수는 각 그룹을 했을 때만 도출 가능한 값들에 대해 함수를 제공하는 것입니다.
"GROUP BY 되었을 때만 도출 가능한 값"
먼저 그룹 함수의 종류에 대해 알아보면,
함수 | 내용 | DBMS |
COUNT | 그룹핑 된 ROW수 | Oracle, MySQL, SQLServer, SQLite |
MAX | 그룹핑 된 값들 중 가장 높은 COLUMN값 (NULL 제외) | Oracle, MySQL, SQLServer, SQLite |
MIN | 그룹핑 된 값들 중 가장 낮은 COLUMN값 (NULL 제외) | Oracle, MySQL, SQLServer, SQLite |
SUM | 그룹핑 된 값들의 합 (NULL 제외) | Oracle, MySQL, SQLServer, SQLite |
AVG | 그룹핑 된 값들의 평균값 (NULL 제외) | Oracle, MySQL, SQLServer, SQLite |
STDDEV | 그룹핑 된 값들의 표준편차 (NULL 제외) | Oracle, MySQL |
일단 오늘의 예시 테이블은 다음과 같습니다. (일관성을 위해 지난 글의 게시글 테이블을 활용할 예정입니다.)
TB_BOARD
TB_BOARD_COMMENT
먼저 이전의 결과를 기준으로 그룹핑을 하면 다음과 같습니다.
3. 자유게시판 게시글 목록에 코멘트 개수랑 같이 보여주세요. (→ 게시글별 코멘트 개수) |
SELECT T1.BBS_SEQ, T1.BBS_TITLE, T1.BBS_CONT, T1.CREATE_DTM, T1.BBS_TYPE_CODE
, COUNT(T2.CMNT_SEQ) as CMNT_CNT
FROM TB_BOARD as T1
LEFT OUTER JOIN TB_BOARD_COMMENT as T2
ON T1.BBS_SEQ = T2.BBS_SEQ
GROUP BY T1.BBS_SEQ, T1.BBS_TITLE, T1.BBS_CONT
COUNT(*)는 NULL을 포함하지만, COUNT(컬럼명)은 해당 컬럼에 NULL값은 제외하고 COUNTING 해주기 때문에, 3번 라인의 결과가 0으로 나오게 됩니다.
확장해서 위의 함수를 다 사용해보면 다음과 같은 결과가 나옵니다.
SELECT T1.BBS_SEQ, T1.BBS_TITLE, T1.BBS_CONT, T1.CREATE_DTM, T1.BBS_TYPE_CODE
, COUNT(T2.CMNT_SEQ) as CMNT_CNT
, MAX(T2.CMNT_SEQ) as MAX_SEQ
, MIN(T2.CMNT_SEQ) as MIN_SEQ
, SUM(T2.CMNT_SEQ) as SUM_SEQ
, STDDEV(T2.CMNT_SEQ) as STDDEV_SEQ
FROM TB_BOARD as T1
LEFT OUTER JOIN TB_BOARD_COMMENT as T2
ON T1.BBS_SEQ = T2.BBS_SEQ
GROUP BY T1.BBS_SEQ, T1.BBS_TITLE, T1.BBS_CONT
반응형
'개발 창고 > Database' 카테고리의 다른 글
[SQL] 인덱스 생성/조회/삭제 (feat. MariaDB) (0) | 2020.11.09 |
---|---|
[SQL] Index란 무엇인가? - 개념편 (0) | 2020.11.09 |
[SQL] GROUP BY란? - 기본편 (0) | 2020.09.23 |
[SQL] 별칭(Alias) 활용하기 (0) | 2020.09.22 |
[SQL] JOIN이란? - CROSS JOIN (0) | 2020.09.17 |