GROUP BY 문은 하나 이상의 열을 기준으로 결과 집합을 그룹화합니다.
그룹화된 열에 COUNT, SUM, AVG 등의 함수를 사용할 수 있습니다.
GROUP BY 구문
SELECT 열_이름,함수(열_이름)FROM 테이블_이름
WHERE 열_이름 연산자 값
GROUP BY 열_이름;
시연 예시
이 장의 예제에서는 다음 테이블 구조와 데이터를 사용합니다. 사용하기 전에 다음 데이터를 데이터베이스로 가져올 수 있습니다.
MariaDB [RUNOOB]> SET NAMES utf8;쿼리 확인, 0행 영향(0.00초)
MariaDB [RUNOOB]> SET FOREIGN_KEY_CHECKS = 0;쿼리 확인, 0행 영향( 0.00초)
MariaDB [RUNOOB]> DROP TABLE IF EXISTS `employee_tbl`; 쿼리 확인, 0개 행이 영향을 받음, 1개의 경고(0.00초)MariaDB [RUNOOB]> CREATE TABLE `employee_tbl`(
-> `id` int(11) NOT NULL,
-> `name` char(10) NOT NULL DEFAULT '',
-> `date` datetime NOT NULL,
- > `singin`tinyint(4) NOT NULL DEFAULT '0' COMMENT '로그인 횟수',
-> PRIMARY KEY (`id`)
-> ENGINE=InnoDB DEFAULT CHARSET=utf8; 쿼리 OK, 0행 영향(0.04초)
MariaDB [RUNOOB]> BEGIN;쿼리 OK, 0행 영향(0.00초)
MariaDB [RUNOOB]> ( '1', 'aa', '2016-04-22 15:25:33', '1'), ('2', 'bb', '2016-04-20 15:25:47', ' 3'), ('3', 'cc', '2016-04-19 15:26:02', '2'), ('4', 'bb', '2016-04-07 15:26: 14', '4'), ('5', 'aa', '2016-04-11 15:26:40', '4'), ('6', 'aa', '2016-04-04 15 :26:54', '2');쿼리 확인, 6개 행 영향, 6개 경고(0.00초)
기록: 6개 중복: 0개 경고: 6
MariaDB [RUNOOB]> ; 쿼리 OK, 0행 영향(0.00초)
MariaDB [RUNOOB]> SET FOREIGN_KEY_CHECKS = 1;쿼리 OK, 0행 영향(0.00초)
가져오기 후 성공하면 다음 SQL 문을 실행합니다:
MariaDB [RUNOOB]> select * from Employees_tbl;+----+------+------------ ---- ------+---------+
| 아이디 | 날짜 |
+----+------+-- ---- ---------------+
| 1 |
| 2 | 2016-04-20 15:25:47 | 3 | 2016-04-19 1 | 2016-04-07 15:26:14 | 5 | 2016-04-11 15:26:40 | 2016-04-04 15:26 :54 | 2 |
+----+------+---------+------- -+
6 행 세트(0.00초)
다음으로 GROUP BY 문을 사용하여 데이터 테이블을 이름별로 그룹화하고 각 사람이 가지고 있는 레코드 수를 계산합니다.
MariaDB [ RUNOOB]> SELECT 이름, COUNT(*) FROM 직원_tbl GROUP BY 이름;+------+----------+
+------+---------+
| 3 || bb | 1 1 | +--- ---+------------+
3행 세트(0.00초)
WITH ROLLUP 사용
WITH ROLLUP 그룹화를 달성하기 위해 통계 데이터를 기반으로 동일한 통계(SUM, AVG, COUNT...)가 수행됩니다.
예를 들어 위의 데이터 테이블을 이름별로 그룹화한 다음 각 사람이 로그인한 횟수를 계산합니다.
MariaDB [RUNOOB]> SELECT name, SUM(singin) as singin_count FROM 직원_tbl 이름별 그룹 ROLLUP;+------+---------------+
| singin_count |+------ +--- -----------+
| 7 || NULL | >+-- ----+---------------+
세트의 4개 행(0.00초)
기록 NULL은 숫자를 나타냅니다. 모두를 위한 로그인 수.
coalesce를 사용하여 NUll을 대체할 수 있는 이름을 설정할 수 있습니다.
select coalesce(a,b,c);
매개변수 설명:
a!=null이면 a를 선택하고,
a==null이면 b를 선택합니다.
b==null이면 c를 선택합니다. > a b c가 모두 null이면 null을 반환합니다(의미 없음).
MariaDB [RUNOOB]> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;+------------+ --------------+
| coalesce(이름, '总数') | singin_count |
+------------+---------------+
| 아아 | 7 |
| bb | 7 |
| 참조번호 | 2 |
| 总数 | 16 |
+------------+---------------+
4 세트의 행(0.00초)