(本文档仅供参考)
问题说明
在即席分析中可以新建计算字段,计算字段的设置项中有一个设置项“参与分组”,那么选择“自动”和“否”的时候有什么区别呢?
解析
实际“参与分组”的设置项主要是针对是否需要在内嵌套查询中生成对应的group by语句。
如果选择”自动“:
1)其它字段有设置聚合(比如sum、count等)那么会把该计算字段拼接在外层的group by语句中分组,具体分析如下:
非计算字段涉及的其他字段如果设置了聚合操作,如下图:
这时候在最终的执行SQL中会拼接在外层的group by语句中分组,最终执行SQL如下:
2)其它字段没有设置聚合,那么不会把该计算字段拼接在group by语句中分组
最终生成的SQL语句如下图:
如果选择“否”:
1)其它字段有设置聚合(比如sum、count等),会生成内嵌套的group by 语句的同时也会存在外嵌套的group by 语句,具体如下:
2)其它字段没有设置聚合,那么会在生成的sql内层拼接group by语句,其中分组字段是除了该计算字段外的所有字段:
这种主要是针对计算字段里面的表达式写上 sum(字段)+aaa这种情况,例如下面的sql
select T471.`F0` as F472, T471.`F2` as F518, T471.`F6` as F474, T471.`F532` as F603 from (select T10.`CategoryName` as F0, T11.`ProductName` as F2, T12.`Quantity` as F6, T12.`Quantity` * T12.`UnitPrice` *(1- T12.`Discount` ) +2 as F532 //计算字段 from `orderdetails` T12 inner join `products` T11 on T12.`ProductID` = T11.`ProductID` inner join `categories` T10 on T10.`CategoryID` = T11.`CategoryID` where T10.`CategoryName` is not null group by T10.`CategoryName`, T11.`ProductName`, T12.`Quantity`) T471 limit 1000
如果觉得不用内层加group by,其实这种情况就该把这个计算字段设置为“自动”解决,生成的sql就不带group by了。