- MySQL
- 2024-06-02
MySQLでGROUP BYを使って集計するときにWITH ROLLUPを使えば出力に集計行を追加することができます。
適当なサンプルデータを用意します。
mysql> create table t1 (a integer, b integer, c integer); insert into t1 values (111,11,11),(222,22,22),(111,12,12),(222,23,23); mysql> SELECT * FROM t1; +------+------+------+ | a | b | c | +------+------+------+ | 111 | 11 | 11 | | 222 | 22 | 22 | | 111 | 12 | 12 | | 222 | 23 | 23 | +------+------+------+ 4 rows in set (0.000 sec)
WITH ROLLUP
まず単純にグループ化してみましょう。
mysql> SELECT a, b, SUM(c) as SUM FROM t1 GROUP BY a, b; +------+------+------+ | a | b | SUM | +------+------+------+ | 111 | 11 | 11 | | 111 | 12 | 12 | | 222 | 22 | 22 | | 222 | 23 | 23 | +------+------+------+ 4 rows in set (0.001 sec)
WITH ROLLUPを付けると出力結果に集計行が追加されます。
mysql> SELECT a, b, SUM(c) as SUM FROM t1 GROUP BY a, b WITH ROLLUP; +------+------+------+ | a | b | SUM | +------+------+------+ | 111 | 11 | 11 | | 111 | 12 | 12 | | 111 | NULL | 23 | | 222 | 22 | 22 | | 222 | 23 | 23 | | 222 | NULL | 45 | | NULL | NULL | 68 | +------+------+------+ 7 rows in set (0.000 sec)
MySQL5.7以前のバージョンでは、GROUP BYは常にソートされます。
並び順を指定すると次のようになります。
このとき集計行に影響はありません。
続きを読む…»