MySQL GROUP BY程式碼筆記
阿新 • • 發佈:2018-11-11
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)