こちらで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)