Latest web development tutorials

MySQL의 GROUP BY 문

문 BY 그룹은 그룹으로 결과 집합에있는 하나 이상의 열을 기반으로.

열 그룹에서 우리는 COUNT, SUM, AVG 및 기타 기능을 사용할 수 있습니다.

GROUP BY 구문

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

예를 들면 데모

우리가 데이터베이스에 다음 데이터를 사용하기 전에이 장의 예는 다음과 같은 테이블 구조와 데이터를 사용합니다.

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `employee_tbl`
-- ----------------------------
DROP TABLE IF EXISTS `employee_tbl`;
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;

-- ----------------------------
--  Records of `employee_tbl`
-- ----------------------------
BEGIN;
INSERT INTO `employee_tbl` VALUES ('1', '小明', '2016-04-22 15:25:33', '1'), ('2', '小王', '2016-04-20 15:25:47', '3'), ('3', '小丽', '2016-04-19 15:26:02', '2'), ('4', '小王', '2016-04-07 15:26:14', '4'), ('5', '小明', '2016-04-11 15:26:40', '4'), ('6', '小明', '2016-04-04 15:26:54', '2');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

가져 오기가 성공 후 다음 SQL 문을 실행 :

mysql> set names utf8;
mysql> SELECT * FROM employee_tbl;
+----+--------+---------------------+--------+
| id | name   | date                | singin |
+----+--------+---------------------+--------+
|  1 | 小明 | 2016-04-22 15:25:33 |      1 |
|  2 | 小王 | 2016-04-20 15:25:47 |      3 |
|  3 | 小丽 | 2016-04-19 15:26:02 |      2 |
|  4 | 小王 | 2016-04-07 15:26:14 |      4 |
|  5 | 小明 | 2016-04-11 15:26:40 |      4 |
|  6 | 小明 | 2016-04-04 15:26:54 |      2 |
+----+--------+---------------------+--------+
6 rows in set (0.00 sec)

다음으로, 우리는 이름 데이터 테이블 그룹에 의해 문 GROUP을 사용하고, 각 사용자에 대한 레코드의 수를 카운트한다 :

mysql> SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
+--------+----------+
| name   | COUNT(*) |
+--------+----------+
| 小丽 |        1 |
| 小明 |        3 |
| 小王 |        2 |
+--------+----------+
3 rows in set (0.01 sec)

ROLLUP과 함께 사용

롤업 같은 통계 실시 다음 패킷의 통계 데이터에 기초하여 구현되어있을 수있다 (SUM, AVG는 ... 카운트).

예를 들어, 우리는 이름으로 하나 이상의 데이터 테이블 그룹 일 후 회수에게 등록 된 각 사용자를 계산한다 :

mysql> SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------+--------------+
| name   | singin_count |
+--------+--------------+
| 小丽 |            2 |
| 小明 |            7 |
| 小王 |            7 |
| NULL   |           16 |
+--------+--------------+
4 rows in set (0.00 sec)

NULL은 기록의 모든 로그인 시도를 나타냅니다.

우리는 대신 NULL 이름을 설정 병합을 사용하여 구문을 병합 :

select coalesce(a,b,c);

매개 변수 설명 :! == NULL의 경우, B를 선택하고, b는 == null의 경우, 다음 C를 선택하면, A = 널 (null)는, 다음을 선택하면, ABC가 null의 경우, 널 (의미없는)을 반환합니다.

이름이 비어있는 경우 다음의 예는, 우리는 대신 총 수의 사용 :

mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, '总数') | singin_count |
+--------------------------+--------------+
| 小丽                   |            2 |
| 小明                   |            7 |
| 小王                   |            7 |
| 总数                   |           16 |
+--------------------------+--------------+
4 rows in set (0.01 sec)