오늘은 group by와 having의 기능에 대해 알아보도록 하겠습니다. 다음은 예제를 위한 테이블입니다.
참고로 위 테이블을 만들고 행들을 쌓기 위해서 다음과 같은 쿼리들이 순차적으로 필요했습니다. 제가 만든 예제를 그대로 따라하고 싶은 분은 복사해서 붙여넣어주세요.
CREATE TABLE student (id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(10) NOT NULL, grade VARCHAR(10) NOT NULL, PRIMARY KEY(id));
INSERT INTO student (name, grade) VALUES ('심교훈', 'C');
INSERT INTO student (name, grade) VALUES ('황병일', 'B');
INSERT INTO student (name, grade) VALUES ('문태호', 'B');
INSERT INTO student (name, grade) VALUES ('정하연', 'C');
INSERT INTO student (name, grade) VALUES ('홍길동', 'A');
INSERT INTO student (name, grade) VALUES ('김개똥', 'D');
INSERT INTO student (name, grade) VALUES ('나나나', 'B');
INSERT INTO student (name, grade) VALUES ('하하하', 'B');
INSERT INTO student (name, grade) VALUES ('내사랑', 'C');
INSERT INTO student (name, grade) VALUES ('김천재', 'D');
INSERT INTO student (name, grade) VALUES ('이바보', 'F');
INSERT INTO student (name, grade) VALUES ('박평범', 'A');
INSERT INTO student (name, grade) VALUES ('로이', 'A');
INSERT INTO student (name, grade) VALUES ('로사', 'D');
INSERT INTO student (name, grade) VALUES ('피카츄', 'B');
INSERT INTO student (name, grade) VALUES ('꼬부기', 'B');
INSERT INTO student (name, grade) VALUES ('파이리', 'B');
INSERT INTO student (name, grade) VALUES ('또가스', 'C');
INSERT INTO student (name, grade) VALUES ('이상해씨', 'A');
INSERT INTO student (name, grade) VALUES ('라이츄', 'F');
GROUP BY 사용법
위 student 테이블에서 학점이 A, B, C, D, F인 학생이 각각 몇 명인지 알고 싶다면 group by를 활용하면 됩니다.
SELECT grade, count(*) FROM student GROUP BY grade;
GROUP BY는 말 그대로 "~을 기준으로 그룹을 지어줘"라는 명령어입니다. 참고로 GROUP BY는 COUNT, MAX, SUM 등의 집계 함수들과 함께 사용됩니다. 본 예제의 경우에는 COUNT 함수가 사용되었습니다.
HAVING 사용법
GROUP BY로 그룹화 한 결과에서 어떤 조건으로 필터링 하고 싶을 때는 HAVING을 사용합니다. 만약 4명 이상의 학생이 받은 학점만 남기고 싶다면 다음과 같이 쿼리문을 수정해주면 됩니다.
SELECT grade, count(*) FROM student GROUP BY grade HAVING count(*) >= 4;
관련 글
☞ [MariaDB] 테이블 내 숫자들을 더하려면 SUM 함수
(이 글은 2021-5-25에 마지막으로 수정되었습니다)
'DB > SQL' 카테고리의 다른 글
[MariaDB] enum 데이터 타입 (0) | 2021.03.25 |
---|---|
[sqlite3] JOIN으로 서로 다른 테이블의 컬럼들 붙이기(내부 조인, 외부 조인) (0) | 2021.03.19 |
[sqlite3] 정수를 정수로 나눴을 때 소수점 이하도 출력되게 하려면 (0) | 2021.03.16 |
[MariaDB] LIKE를 사용하여 특정 문자열 검색하기 (0) | 2021.01.13 |
[MySQL, MariaDB] 데이터베이스 백업 및 복구하기 (mysqldump) (0) | 2020.12.30 |
[MariaDB] 컬럼 순서 변경하기 (6) | 2020.12.26 |
[MariaDB] 테이블 이름 변경하기 (0) | 2020.12.25 |
[MariaDB] 사용자에게 모든 권한 또는 CRUD 권한 부여하기 (0) | 2020.12.25 |