MySQL GROUP BY 문

巴扎黑
巴扎黑원래의
2016-12-19 11:11:171165검색

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 이름;+------+----------+

| COUNT(*) |

+------+---------+

| 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초)


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.