こちらでROLLUPが考察さているが、PostgreSQLも先月(2016年1月)リリースのversion 9.5でROLLUPをサポートしたので、試す。
PostgreSQLのドキュメントはこちら。みるとわかるけども、PostgreSQLとSQL-ServerはSQL標準準拠。MySQLが方言。
サンプルはこちらと同様のもの。
\d ureyuki
Table "public.ureyuki"
Column | Type | Modifiers
----------+---------+-----------
id | integer |
shurui | text |
ure_date | date |
seibetsu | text |
ure_su | integer |
SELECT * FROM ureyuki;
id | shurui | ure_date | seibetsu | ure_su
----+--------------+------------+----------+--------
1 | まんが | 2016-02-01 | 男 | 4
2 | まんが | 2016-02-02 | 男 | 1
3 | まんが | 2016-02-02 | 女 | 2
4 | 情報誌 | 2016-02-05 | 男 | 2
5 | 情報誌 | 2016-02-03 | 女 | 2
6 | ファッション | 2016-02-03 | 男 | 1
7 | ファッション | 2016-02-04 | 女 | 1
(7 rows)
例1
SELECT * FROM ( SELECT shurui, SUM(ure_su) sum_su
FROM ureyuki
GROUP BY shurui WITH ROLLUP
) SQ
ORDER BY shurui;は、PostgreSQLの場合、以下のように書く。
SELECT *
FROM ( SELECT shurui, SUM(ure_su) sum_su
FROM ureyuki
GROUP BY ROLLUP (shurui)
) SQ
ORDER BY shurui DESC;
shurui | sum_su
--------------+--------
| 13
情報誌 | 4
ファッション | 2
まんが | 7
(4 rows)
例2
MySQLのquery
SELECT * FROM (SELECT shurui, seibetsu, SUM(ure_su)su FROM ureyuki GROUP BY shurui, seibetsu WITH ROLLUP) SQ ORDER BY shurui, seibetsu;
はPostgreSQLの場合、次のように書く。
SELECT * FROM (SELECT shurui, seibetsu, SUM(ure_su)su
FROM ureyuki
GROUP BY ROLLUP (shurui, seibetsu)) SQ
ORDER BY shurui, seibetsu;
shurui | seibetsu | su
--------------+----------+----
まんが | 女 | 2
まんが | 男 | 5
まんが | | 7
ファッション | 女 | 1
ファッション | 男 | 1
ファッション | | 2
情報誌 | 女 | 2
情報誌 | 男 | 2
情報誌 | | 4
| | 13
(10 rows)