kumpulan MySQL


MySQL GROUP BY statement

GROUP BY statement mengumpulkan set hasil berdasarkan satu atau lebih lajur.

Kami boleh menggunakan fungsi seperti COUNT, SUM, AVG, dll. pada lajur berkumpulan.

KUMPULAN MENGIKUT sintaks

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

Demonstrasi contoh

Contoh dalam bab ini menggunakan struktur jadual dan data Sebelum ini menggunakannya, kami Anda boleh mengimport data berikut terlebih dahulu ke dalam pangkalan data.

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;

Selepas import berjaya, laksanakan 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)

Seterusnya kami menggunakan pernyataan GROUP BY untuk mengumpulkan jadual data mengikut nama dan mengira bilangan rekod 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 WITH ROLLUP

WITH ROLLUP untuk melaksanakan statistik yang sama (SUM, AVG, COUNT...) berdasarkan data statistik terkumpul.

Sebagai contoh, kami mengumpulkan jadual data di atas mengikut nama, dan kemudian mengira bilangan masa log masuk untuk setiap orang:

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)

Rekod NULL mewakili bilangan masa log masuk untuk semua orang.

Kita boleh menggunakan gabungan untuk menetapkan nama yang boleh menggantikan sintaks NUll:

select coalesce(a,b,c);

Penerangan parameter:

Jika a==null, Kemudian pilih b; jika b==null, kemudian pilih c; jika a!=null, kemudian pilih a; jika a b c kedua-duanya batal, pulangan adalah batal

Dalam contoh berikut, jika nama itu kosong, kami menggunakan jumlah nombor sebaliknya:

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)

Tutorial video berkaitan yang disyorkan: