1. 程式人生 > >MySQL GROUP BY程式碼筆記

MySQL GROUP BY程式碼筆記

mysql> insert into testB values
    -> (9,'JAVA','某年','1018-02-28'),
    -> (6,'PHP','某月','1068-02-28'),
    -> (8,'C#','某日','1168-02-28');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from testB;
+----+-------+---------+------------+
| id | name  | address | time       |
+----+-------+---------+------------+
|  1 | c語言 | 昨天    | 2011-09-09 |
|  2 | MySQL | 今天    | 2018-06-06 |
|  3 | C++   | 明天    | 2018-09-09 |
|  4 | GO    | 未來    | 2019-09-08 |
|  6 | PHP   | 某月    | 1068-02-28 |
|  8 | C#    | 某日    | 1168-02-28 |
|  9 | JAVA  | 某年    | 1018-02-28 |
+----+-------+---------+------------+
7 rows in set (0.01 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into testB values
    -> (12,'BAISC','某刻','1268-02-28');
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from testB;
+----+-------+---------+------------+
| id | name  | address | time       |
+----+-------+---------+------------+
|  1 | c語言 | 昨天    | 2011-09-09 |
|  2 | MySQL | 今天    | 2018-06-06 |
|  3 | C++   | 明天    | 2018-09-09 |
|  4 | GO    | 未來    | 2019-09-08 |
|  6 | PHP   | 某月    | 1068-02-28 |
|  8 | C#    | 某日    | 1168-02-28 |
|  9 | JAVA  | 某年    | 1018-02-28 |
| 12 | BAISC | 某刻    | 1268-02-28 |
+----+-------+---------+------------+
8 rows in set (0.00 sec)

mysql> select name as '名稱',count(*) as '數量' from testB group by name;
+-------+------+
| 名稱  | 數量 |
+-------+------+
| BAISC |    1 |
| C#    |    1 |
| C++   |    1 |
| c語言 |    1 |
| GO    |    1 |
| JAVA  |    1 |
| MySQL |    1 |
| PHP   |    1 |
+-------+------+
8 rows in set (0.03 sec)

mysql> insert into testB values
    -> (5,'C++','某刻','1668-02-28');
Query OK, 1 row affected (0.00 sec)

mysql> select name as '名稱',count(*) as '數量' from testB group by name;
+-------+------+
| 名稱  | 數量 |
+-------+------+
| BAISC |    1 |
| C#    |    1 |
| C++   |    2 |
| c語言 |    1 |
| GO    |    1 |
| JAVA  |    1 |
| MySQL |    1 |
| PHP   |    1 |
+-------+------+
8 rows in set (0.00 sec)

//使用 WITH ROLLUP
//WITH ROLLUP 可以實現在分組統計資料基礎上再進行相同的統計(SUM,AVG,COUNT…)。

mysql> select name as '名稱',count(*) as '數量' from testB group by name with rollup;
+-------+------+
| 名稱  | 數量 |
+-------+------+
| BAISC |    1 |
| C#    |    1 |
| C++   |    2 |
| c語言 |    1 |
| GO    |    1 |
| JAVA  |    1 |
| MySQL |    1 |
| PHP   |    1 |
| NULL  |    9 |
+-------+------+
9 rows in set (0.01 sec)

//可以使用 coalesce 來設定一個可以取代 NUll 的名稱,coalesce 語法
//select coalesce(a,b,c);
//引數說明:
//如果a==null,則選擇b;如果b==null,則選擇c;
//如果a!=null,則選擇a;如果a b c 都為null ,則返回為null(沒意義)。

mysql> select coalesce('名稱','總數'),count(*) as '數量' from testB group by name with rollup;
+-------------------------+------+
| coalesce('名稱','總數') | 數量 |
+-------------------------+------+
| 名稱                    |    1 |
| 名稱                    |    1 |
| 名稱                    |    2 |
| 名稱                    |    1 |
| 名稱                    |    1 |
| 名稱                    |    1 |
| 名稱                    |    1 |
| 名稱                    |    1 |
| 名稱                    |    9 |
+-------------------------+------+
9 rows in set (0.01 sec)

mysql> select coalesce(name,'總數'),count(*) as '數量' from testB group by name with rollup;
+-----------------------+------+
| coalesce(name,'總數') | 數量 |
+-----------------------+------+
| BAISC                 |    1 |
| C#                    |    1 |
| C++                   |    2 |
| c語言                 |    1 |
| GO                    |    1 |
| JAVA                  |    1 |
| MySQL                 |    1 |
| PHP                   |    1 |
| 總數                  |    9 |
+-----------------------+------+
9 rows in set (0.00 sec)