如果您经常需要对数据进行多维度聚合分析(例如既需要按照a列聚合,也要按照b列聚合,同时要按照a和b两列聚合),您可以使用GROUPING SETS语句进行多维度聚合分析,避免多次使用UNION ALL影响性能。

语法格式

SELECT [ ALL | DISTINCT ]
{ * | projectItem [, projectItem ]* }
FROM tableExpression
GROUP BY 
[GROUPING SETS { groupItem [, groupItem ]* } ];

示例

  • 测试数据
    username month day
    Lily 10 1
    Lucy 11 21
    Lily 11 21
  • 测试案例
    SELECT  
        `month`,
        `day`,
        count(distinct `username`) as uv
    FROM tmall_item
    group by 
    grouping sets((`month`),(`month`,`day`));
  • 测试结果
    month day uv
    10 1 1
    10 null 1
    11 21 1
    11 null 1
    11 21 2
    11 null 2
    说明 此结果为调试结果,会显示出计算过程。如果您的结果表是DataHub、消息队列Kafka或消息队列MQ等,正式上线也会显示过程数据。但如果您的结果表是云数据RDS等关系型数据库,正式上线,主键相同的记录显示为一条数据。