rollup
cube
grouping sets
grouping
grouping_id
(8.0.32)
https://dev.mysql.com/doc/refman/8.0/en/group-by-modifiers.html
rollup、grouping、grouping_id -> 使用可能
cubeとgrouping sets -> 使用不可★
※grouping_id関数はgrouping関数と同じ名前
drop table tab1 ;
create table tab1
(
col1 varchar(4)
, col2 varchar(4)
, col3 varchar(4)
, col4 bigint
);
insert into tab1 values('AAA','AA','A',1);
insert into tab1 values('AAA','AA','B',2);
insert into tab1 values('AAA','BB','A',3);
insert into tab1 values('AAA','BB','B',4);
insert into tab1 values('BBB','AA','A',5);
insert into tab1 values('BBB','AA','B',6);
insert into tab1 values('BBB','BB','A',7);
insert into tab1 values('BBB','BB','B',8);
select * from tab1 order by col1,col2,col3;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col1, col2) gid
, col1
, col2
, count(*)
, sum(col4)
from tab1
group by col1, col2 with rollup
order by col1, col2
;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col3) g3
, grouping(col1, col2, col3) gid
, col1
, col2
, col3
, count(*)
, sum(col4)
from tab1
group by col1, col2, col3 with rollup
order by col1, col2, col3
;
(19c)
https://docs.oracle.com/cd/F19136_01/dwhsg/sql-aggregation-data-warehouses.html#GUID-E051A04E-0C53-491D-9B16-B71BA00B80C2
https://qiita.com/q1701/items/2321b9a8674d9796af5b
drop table tab1 purge;
create table tab1
(
col1 varchar2(4)
, col2 varchar2(4)
, col3 varchar2(4)
, col4 int
);
insert into tab1 values('AAA','AA','A',1);
insert into tab1 values('AAA','AA','B',2);
insert into tab1 values('AAA','BB','A',3);
insert into tab1 values('AAA','BB','B',4);
insert into tab1 values('BBB','AA','A',5);
insert into tab1 values('BBB','AA','B',6);
insert into tab1 values('BBB','BB','A',7);
insert into tab1 values('BBB','BB','B',8);
commit;
select * from tab1 order by col1,col2,col3;
select grouping(col1) g1
, grouping(col2) g2
, grouping_id(col1, col2) gid
, col1
, col2
, count(*)
, sum(col4)
from tab1
group by col1, col2
order by col1, col2
;
select grouping(col1) g1
, grouping(col2) g2
, grouping_id(col1, col2) gid
, col1
, col2
, count(*)
, sum(col4)
from tab1
group by col1, rollup(col2)
order by col1, col2
;
※grouping_idは、行ごとに、該当するgrouping関数を使用した場合に生成される1と0のセットを取り、それを連結してビット・ベクトルを形成します
select grouping(col1) g1
, grouping(col2) g2
, grouping(col3) g3
, grouping_id(col1, col2, col3) gid
, col1
, col2
, col3
, count(*)
, sum(col4)
from tab1
group by col1, rollup(col2, col3)
order by col1, col2, col3
;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col3) g3
, grouping_id(col1, col2, col3) gid
, col1
, col2
, col3
, count(*)
, sum(col4)
from tab1
group by cube(col1, col2, col3)
order by col1, col2, col3
;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col3) g3
, grouping_id(col1, col2, col3) gid
, col1
, col2
, col3
, count(*)
, sum(col4)
from tab1
group by grouping sets( col2, (col1, col3), () )
order by col1, col2, col3
;
(15)
https://www.postgresql.jp/document/14/html/queries-table-expressions.html#QUERIES-GROUPING-SETS
※grouping_id関数はgrouping関数と同じ名前
drop table tab1 ;
create table tab1
(
col1 varchar(4)
, col2 varchar(4)
, col3 varchar(4)
, col4 bigint
);
insert into tab1 values('AAA','AA','A',1);
insert into tab1 values('AAA','AA','B',2);
insert into tab1 values('AAA','BB','A',3);
insert into tab1 values('AAA','BB','B',4);
insert into tab1 values('BBB','AA','A',5);
insert into tab1 values('BBB','AA','B',6);
insert into tab1 values('BBB','BB','A',7);
insert into tab1 values('BBB','BB','B',8);
select * from tab1 order by col1,col2,col3;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col1, col2) gid
, col1
, col2
, count(*)
, sum(col4)
from tab1
group by col1, col2
order by col1, col2
;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col1, col2) gid
, col1
, col2
, count(*)
, sum(col4)
from tab1
group by col1, rollup(col2)
order by col1, col2
;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col3) g3
, grouping(col1, col2, col3) gid
, col1
, col2
, col3
, count(*)
, sum(col4)
from tab1
group by col1, rollup(col2, col3)
order by col1, col2, col3
;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col3) g3
, grouping(col1, col2, col3) gid
, col1
, col2
, col3
, count(*)
, sum(col4)
from tab1
group by cube(col1, col2, col3)
order by col1, col2, col3
;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col3) g3
, grouping(col1, col2, col3) gid
, col1
, col2
, col3
, count(*)
, sum(col4)
from tab1
group by grouping sets( col2, (col1, col3), () )
order by col1, col2, col3
;
(2022)
https://learn.microsoft.com/ja-jp/sql/t-sql/queries/select-group-by-transact-sql?view=sql-server-ver16
https://devlights.hatenablog.com/entry/20090830/p1
drop table tab1 ;
create table tab1
(
col1 varchar(4)
, col2 varchar(4)
, col3 varchar(4)
, col4 bigint
);
insert into tab1 values('AAA','AA','A',1);
insert into tab1 values('AAA','AA','B',2);
insert into tab1 values('AAA','BB','A',3);
insert into tab1 values('AAA','BB','B',4);
insert into tab1 values('BBB','AA','A',5);
insert into tab1 values('BBB','AA','B',6);
insert into tab1 values('BBB','BB','A',7);
insert into tab1 values('BBB','BB','B',8);
select * from tab1 order by col1,col2,col3;
select grouping(col1) g1
, grouping(col2) g2
, grouping_id(col1, col2) gid
, col1
, col2
, count(*)
, sum(col4)
from tab1
group by col1, col2
order by col1, col2
;
select grouping(col1) g1
, grouping(col2) g2
, grouping_id(col1, col2) gid
, col1
, col2
, count(*)
, sum(col4)
from tab1
group by col1, rollup(col2)
order by col1, col2
;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col3) g3
, grouping_id(col1, col2, col3) gid
, col1
, col2
, col3
, count(*)
, sum(col4)
from tab1
group by col1, rollup(col2, col3)
order by col1, col2, col3
;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col3) g3
, grouping_id(col1, col2, col3) gid
, col1
, col2
, col3
, count(*)
, sum(col4)
from tab1
group by cube(col1, col2, col3)
order by col1, col2, col3
;
select grouping(col1) g1
, grouping(col2) g2
, grouping(col3) g3
, grouping_id(col1, col2, col3) gid
, col1
, col2
, col3
, count(*)
, sum(col4)
from tab1
group by grouping sets( col2, (col1, col3), () )
order by col1, col2, col3
;