GROUPING SETS
Function
This statement is used to generate the cross-table row and achieve the cross-statistics of the GROUP BY field.
Syntax
1 2 3 |
SELECT attr_expr_list FROM table_reference GROUP BY col_name_list GROUPING SETS(col_name_list); |
Keyword
GROUPING SETS is the expansion of GROUP BY. For example:
- SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS((a,b));
It can be converted to the following query:
1 2
SELECT a, b, sum(expression) FROM table GROUP BY a, b;
- SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS(a,b);
It can be converted to the following two queries:
1 2 3
SELECT a, NULL, sum(expression) FROM table GROUP BY a; UNION SELECT NULL, b, sum(expression) FROM table GROUP BY b;
- SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS((a,b), a);
It can be converted to the following two queries:
1 2 3
SELECT a, b, sum(expression) FROM table GROUP BY a, b; UNION SELECT a, NULL, sum(expression) FROM table GROUP BY a;
- SELECT a, b, sum(expression) FROM table GROUP BY a, b GROUPING SETS((a,b), a, b, ());
It can be converted to the following four queries:
1 2 3 4 5 6 7
SELECT a, b, sum(expression) FROM table GROUP BY a, b; UNION SELECT a, NULL, sum(expression) FROM table GROUP BY a, NULL; UNION SELECT NULL, b, sum(expression) FROM table GROUP BY NULL, b; UNION SELECT NULL, NULL, sum(expression) FROM table;
Precautions
- The to-be-grouped table must exist. Otherwise, an error is reported.
- Different from ROLLUP, there is only one syntax for GROUPING SETS.
Example
To generate the cross-table row according to the group_id and job fields and return the total salary on each aggregation condition, run the following statement:
1 2 3 |
SELECT group_id, job, SUM(salary) FROM group_test GROUP BY group_id, job GROUPING SETS (group_id, job); |
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
For any further questions, feel free to contact us through the chatbot.
Chatbot