2 大数据开发之grouping sets与coalesce结合的妙用

在开发过程中,经常会有产品剔除需要将整体数据与拆分维度的数据放在一起,可能会有人想到将不同维度group by 的数据union all在一起,但这样效率比较低。使用grouping sets相当于是将不同维度group by的数据union all,对于不在聚合维度里的列,可以使用coalesce将null值转为你想要的描述。

比如,需要将分国内海外和星级的数据与分国内海外不分星级的整体数据,放在一起。分国内海外星级的数据使用 group by countryflag ,star ,而只区分国内海外的使用group by countryflag,不区分星级的话,star字段为NULL,可以使用coalesce转为“整体”。

select 
       case when country = '中国' then '国内'
            when country<> '中国' then '海外'
            else '未知' end as countryflag 
      ,coalesce(star,'整体') as star       -- 这种写法要确保star原本没有NULL值
      ,stddev(height) as std_height
      
from 
(
    select a.cid
          ,a.sid 
          ,a.pvid
          ,a.masterhotelid
          ,a.page 
          ,a.hotelcardheight
          ,case when b.starlevel >= 4 then '高星'
                else '低星' end as star 
    from db.table
) a 
group by countryflag ,star 
grouping sets( (countryflag ),
               (countryflag ,star) )

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 使用GROUP BY子句来对查询结果进行分组,使用GROUPING SETS子句来指定多个分组集。 语法如下: ``` SELECT column1, column2, ..., aggregate_function(column) FROM table_name WHERE condition GROUP BY GROUPING SETS ((column1, column2), (column1), (column2), ()) ``` 其中,GROUPING SETS子句中指定了三个分组集:(column1, column2), (column1), (column2), ()。这意味着将按照column1和column2的组合进行分组,按照column1进行分组,按照column2进行分组,以及不进行分组。在每个分组集中,可以使用聚合函数来计算结果。 ### 回答2: groupinggrouping sets是SQL中用于分组操作的语法。 grouping语法用于将数据集按照指定的列进行分组。它可以与聚合函数一起使用,将结果按照分组列的不同值进行汇总。例如,可以使用以下语句对销售数据按照地区进行分组,并计算每个地区的总销售额: SELECT region, SUM(sales) FROM sales GROUP BY region; grouping sets语法是对grouping的扩展,它能够一次性进行多个不同维度的分组。通过使用grouping sets,可以同时按照不同的列进行分组,并计算每个组合的聚合值。例如,可以使用以下语句对销售数据同时按照地区、年份和产品类型进行分组,并计算每个组合的总销售额: SELECT region, year, product_type, SUM(sales) FROM sales GROUP BY grouping sets (region, year, product_type); 这个语句将生成一个结果集,其中包含按照地区、年份和产品类型进行分组的所有可能组合,并计算每个组合的总销售额。 groupinggrouping sets的结合使用在需要对多个维度进行灵活分组和聚合的场景中非常有用。它们能够帮助用户快速获取多维度的统计信息,并且可以减少多次查询的开销。 ### 回答3: groupinggrouping sets是在SQL语句中一起使用的两个概念。 grouping用于对SQL查询结果进行分组,并可以根据分组进行聚合计算。它通常与GROUP BY子句一起使用。GROUP BY子句是一个用于指定分组条件的语句,它将查询结果按照指定的列或表达式进行分组。通过分组,我们可以在查询结果上执行聚合操作,例如计算总数、平均值、最大值等。 grouping sets是在分组结果上执行聚合计算的一种扩展语法。它可以用于同时对多个分组条件进行聚合计算,而不是仅限于单个GROUP BY子句。通过在GROUP BY子句中指定多个列或表达式,我们可以同时按照不同的条件对查询结果进行分组和聚合。 grouping sets的语法与普通的GROUP BY子句略有不同。在普通GROUP BY子句中,我们使用列名或表达式来指定分组条件。而在grouping sets中,我们使用简化的语法来指定多个分组条件。例如,我们可以使用GROUP BY GROUPING SETS ((列1), (列2))来同时对列1和列2进行分组和聚合。这将生成由两个分组条件下的聚合结果组成的查询结果。 通过使用groupinggrouping sets,我们可以方便地对查询结果进行多重分组和聚合计算,从而得到更详细和全面的分析结果。它们是SQL语言中强大和灵活的功能之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值