Free Lines Arrow
본문 바로가기
DataBase/DB 기초

[DB] GROUP BY

by skahn1215 2021. 8. 5.
728x90
반응형

GROUP BY 란?

  • 집계 함수 이다.
  • DB 에서 데이터를 그룹화 할수 있다.

 

준비사항

https://vprog1215.tistory.com/145

 

[DB] Join

Join 이란? DB의 테이블을 만들때 효율성과, 가독성, 중복데이터를 피하기 위해 여러개의 Table을 만든다. Join을 이용하여 나눠진 테이블을 조합할수 있다. 준비사항 H2를 설치하여 다음과 같이 SQL

vprog1215.tistory.com

 

 

 

 

GROUPY BY 에서 사용할 수 있는 함수들

함수명 내용 입력값 타입
SUM 그룹별 합계를 구한다 컬럼 숫자타입만가능
AVG 그룹별 평균을 구한다. 컬럼 숫자타입만가능
MIN 최소값을 구한다. 컬럼 모든타입 가능
MAX 최대값을 구한다. 컬럼 모든타입 가능
stddev 표준편차를 구한다. 컬럼 숫자타입만 가능
VARIANCE 분산 컬럼 숫자타입만 가능하다.
COUNT 갯수를 구한다. 컬럼, * 모든타입가능

 

 

 

 

예제 GROUP BY 로 수강목록을 듣는 학생수 구하기

아래 학생 테이블과 수강테이블을 조인하여 다음과 같은 데이터를 얻었다.

아래 데이터에서 수강과목별 듣는 학생수를 구하고 싶다 어떻게 해야될까?

STUDENT_ID STUDENT_NAME SUBJECT_NAME
1 Jenna C++
2 Dan Java
3 Tom Java
4 Grace null

 

GROUP BY 

당연하다 GROUP BY 연습이므로 GROUP BY를 사용하면된다.

SUBJECT_NAME 으로 그룹을 먼저 건다.

그럼 수강과목기준으로 그룹이 만들어 진다.

 

그룹이 되었으므로 일반적인 출력은 그룹명만 출력이 가능하다

SELECT su.SUBJECT_NAME,
FROM students AS st 
LEFT JOIN subjects AS su 
ON st.SUBJECT_ID = su.SUBJECT_ID
GROUP BY SUBJECT_NAME;

출력결과

SUBJECT_NAME
null
C++
Java

 

 

GROUP BY 에 COUNT 적용해서 수강하는 학생수 뽑기

SELECT   COUNT(*), su.SUBJECT_NAME
FROM students AS st 
LEFT JOIN subjects AS su 
ON st.SUBJECT_ID = su.SUBJECT_ID
GROUP BY SUBJECT_NAME;
COUNT SUBJECT_NAME
1 null
1 C++
2 Java

 

 

GROUP BY 에 COUNT 적용후 HAVING 절로 조건걸기

SELECT   COUNT(*), su.SUBJECT_NAME
FROM students AS st 
LEFT JOIN subjects AS su 
ON st.SUBJECT_ID = su.SUBJECT_ID
GROUP BY SUBJECT_NAME
HAVING COUNT(*) > 1
COUNT SUBJECT_NAME
2 Java

 

728x90
반응형

'DataBase > DB 기초' 카테고리의 다른 글

[DB] Index 기본  (0) 2023.02.09
[DB] NoSQL  (0) 2021.08.19
[DB] Index 기초  (0) 2021.08.19
[DB] Join  (0) 2021.08.05
[DB] 트랜잭션  (0) 2021.07.21

댓글