GROUPING SETS ( GROUP BY GROUPING SETS (<groupsets>) )
GROUP BY GROUPING SETS is an advanced extension of the GROUP BY clause that allows multiple groupings within a single statement. Each grouping set is a set of dimension columns.
> select count(cc_company) as total_count, cc_county, cc_class
from call_center
where cc_county in ('Williamson County', 'Bronx County', 'Huron County')
group by grouping sets (cc_county, cc_class);
# | total_count | cc_county | cc_class
1 | 2 | Williamson County | null
2 | 3 | Bronx County | null
3 | 1 | Huron County | null
4 | 2 | null | large
5 | 4 | null | medium
ROLLUP ( GROUP BY ROLLUP <groupRollup> )
GROUP BY ROLLUP is an extension of the GROUP BY clause that produces sub-total rows (in addition to the grouped rows). Sub-total rows are rows that further aggregate whose values are derived by computing the same aggregate functions that were used to produce the grouped rows.
> select count(cc_company) as total_count, cc_county, cc_class
from call_center
where cc_county in ('Williamson County', 'Bronx County', 'Huron County')
group by rollup (cc_county, cc_class);
# | total_count | cc_county | cc_class
1 | 2 | Williamson County | null
2 | 3 | Bronx County | null
3 | 1 | Huron County | null
4 | 2 | Williamson County | large
5 | 3 | Bronx County | medium
6 | 1 | Huron County | medium
7 | 6 | null | null
CUBE (GROUP BY CUBE <groupCube>)
GROUP BY CUBE is an extension of the GROUP BY clause similar to GROUP BY ROLLUP. In addition to producing all the rows of a GROUP BY ROLLUP, GROUP BY CUBE adds all the “cross-tabulations” rows. Sub-total rows are rows that further aggregate whose values are derived by computing the same aggregate functions that were used to produce the grouped rows.
> select count(cc_company) AS total_count, cc_county, cc_class
from call_center
where cc_county in ('Williamson County', 'Bronx County', 'Huron County')
group by cube (cc_county, cc_class);
# | total_count | cc_county | cc_class
----------------------------------------------
1 | 6 | null | null
2 | 2 | Williamson County | null
3 | 4 | Bronx County | null
4 | 2 | Huron County | null
5 | 3 | Williamson County | large
6 | 1 | Bronx County | medium
7 | 2 | Huron County | medium
8 | 3 | null | large
9 | 1 | null | medium
EXCEPT ( <column> )
SELECT * EXCEPTcolumns that should be excluded from the results
> WITH cte AS (SELECT 5 as c1,'e6data' as c2, 10 as c3)
SELECT * EXCEPT (c3, c2) FROM cte
c2
5
EXCEPT SET OPERATOR
Eliminates rows from the result set of one query that are present in the result set of another query, while also removing duplicates.
SELECT ...
EXCEPT
SELECT ...
> with cte as
(select 1 as id, 'AAAA' as name
union all
select 2 as id, 'AAAB' as name
union all
select 3 as id, 'AAAC' as name
union all
select 4 as id, 'AAAD' as name
)
select * from cte
except
select * from cte
where id < 3
order by 1,2
|id |name
|3 |AAAC
|4 |AAAD