Applies to: ✅ Data 360 SQL ✅ Tableau Hyper API
Returns a bit mask indicating which GROUP BY expressions are not included in the current grouping set.
Syntax
grouping(<group_by_expression> [, ...])
Arguments
Required
<group_by_expression>: One or more expressions that must exactly match expressions in theGROUP BYclause.
Returns
Returns an integer bit mask. Each bit corresponds to an argument, with the rightmost argument as the least-significant bit. A bit is 0 if the expression is in the grouping set; 1 if it is not.
Considerations
- Used with grouping sets (
ROLLUP,CUBE,GROUPING SETS) to identify which columns were aggregated. - Maximum of 31 expressions can be used as arguments.
- Arguments are not evaluated but must exactly match
GROUP BYexpressions. - Helps distinguish between actual NULL values and NULLs representing aggregated rows.
Examples
Basic GROUPING with ROLLUP
Identify aggregation levels with ROLLUP.
SELECT make, model, grouping(make, model), sum(sales)
FROM items_sold
GROUP BY ROLLUP(make, model);
Returns:
| make | model | grouping | sum |
|---|---|---|---|
| Foo | GT | 0 | 10 |
| Foo | Tour | 0 | 20 |
| Bar | City | 0 | 15 |
| Bar | Sport | 0 | 5 |
| Foo | NULL | 1 | 30 |
| Bar | NULL | 1 | 20 |
| NULL | NULL | 3 | 50 |
0: Both make and model are grouped.1: model is aggregated (not grouped).3: Both make and model are aggregated.
Filter Subtotals
Use GROUPING to filter specific aggregation levels.
SELECT make, model, sum(sales)
FROM items_sold
GROUP BY ROLLUP(make, model)
HAVING grouping(make, model) = 1;
Returns only the subtotals by make (where model is aggregated).