Latest web development tutorials

Pernyataan MySQL GROUP BY

GROUP BY pernyataan berdasarkan satu atau lebih kolom dalam hasil ditetapkan menjadi kelompok-kelompok.

Dalam pengelompokan kolom kita dapat menggunakan COUNT, SUM, AVG, dan fungsi lainnya.

GROUP BY Syntax

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

contoh Demo

Contoh bab ini menggunakan struktur tabel berikut dan data, sebelum kita dapat mulai menggunakan data berikut ke dalam database.

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;

Setelah impor berhasil, menjalankan pernyataan SQL berikut:

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)

Selanjutnya, kita menggunakan GROUP BY pernyataan untuk kelompok tabel data dengan nama, dan menghitung jumlah record untuk setiap orang:

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

Gunakan DENGAN ROLLUP

DENGAN ROLLUP dapat diimplementasikan atas dasar data statistik dalam paket dan kemudian mengalami statistik yang sama (SUM, AVG, COUNT ...).

Sebagai contoh, kita akan lebih dari satu kelompok data tabel dengan nama, dan kemudian menghitung jumlah kali setiap orang yang terdaftar:

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 menunjukkan yang merekam semua upaya login.

Kita dapat menggunakan menyatu untuk menetapkan pengganti nama nol, menyatu sintaks:

select coalesce(a,b,c);

Parameter Deskripsi :! Jika null ==, kemudian pilih b, jika b == null, kemudian pilih c, jika a = null, maka pilihlah, jika abc null, null (berarti yang) kembali.

Contoh berikut, jika nama kosong yang kita gunakan bukan dari jumlah:

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)