Database/MySQL

(MySQL) 그룹화: GROUP BY, HAVING 조건 지정하기

고니자니 2023. 3. 22. 19:54
반응형

여기에서는 GROUP BY 구를 이용해서 집계합수로 넘겨줄 집합을 그룹으로 나누는 방법을 소개합니다.

 

먼저 학생(student) 테이블의 학번, 이름, 학년을 조회합니다.

mysql> select hakbun, name, s_year from student;

학생(student) 테이블의 학번, 이름, 학년

 

등록된 학년(s_year)은 다음과 같습니다.

mysql> select s_year from student GROUP BY s_year;

GROUP BY 구를 이용해서 학년별 인원수를 구합니다.

DISTINCT 구문을 사용했을 때와 같은 결과가 나왔습니다. GROUP BY에 열을 지정하여 그룹화하면 지정된 열의 값이 같은 행이 하나의 그룹으로 묶입니다.

 

그러나 DISTINCT로 중복을 제거하는 것과 GROUP BY 구문으로 그룹화 하는 것은 차이가 있습니다.

GROUP BY 구문을 사용하는 경우에는 집계함수와 함께 사용되는 경우가 대부분입니다.

 

다음은 집계함수 COUNT 함수를 이용해서 학년별 인원수를 출력하는 문장입니다.

mysql> select s_year, COUNT(s_year) 
             from student GROUP BY s_year;

SQL: 학년별 학생수 구하기

 

반응형

 

HAVING 구로 조건 지정하기

집계함수는 WHERE 구로 조건을 지정할 수 없습니다.

예를 들어, 인원수가 3인 학년을 출력하는 SQL 구문을 다음과 같이 만들었다고 가정해 보겠습니다.

select s_year, COUNT(s_year) from student 
WHERE COUNT(s_year)=3
GROUP BY s_year;

집계함수에 WHERE 구로 조건을 지정할 수 없다

 

집계함수에는 HAVING 구를 이용해서 조건을 지정할 수 있습니다.

select s_year, COUNT(s_year) from student 
GROUP BY s_year
HAVING COUNT(s_year)=3;

GROUP BY와 HAVING

 

ORDER BY로 그룹으로 출력된 결과값을 정렬할 수 있습니다.

다음 코드는 학년별 인원수가 많은 학년부터 정렬하여 출력하는 SQL 구문입니다.

select s_year, COUNT(s_year) from student 
GROUP BY s_year
ORDER BY COUNT(s_year);

GROUP BY의 결과 정렬

 

이상으로 GROUO BY 구, HAVING 조건 지정, ORDER BY로 그룹의 결과를 정렬하는 MySQL 구문에 대해서 설명했습니다.

반응형