sql中的group by和聚合函数哪些不得不说的事……

12 篇文章 0 订阅
2 篇文章 0 订阅

啥也不说了,先上代码:

--数据装载
insert overwrite ads_sku_info
select
    '2020-06-14' dt,
    source,
    target,
    count(*)
from
(
    select
        concat('step-', step, ':', source) source,
        concat('step-', step+1,':', target) target
    from
    (
        select
            page_id,
            lag(page_id, 1, null) over(partition by session_id order by ts rows between UNBOUNDED PRECEDING and unbounded following) source,
            lead(page_id, 1, null) over(partition by session_id order by ts rows between UNBOUNDED preceding and unbounded following) target,
            row_number() over (partition by session_id order by ts) step
        from
        (
            select
                last_page_id,
                page_id,
                ts,
                concat(mid_id, '-', last_value(if(last_page_id is null, ts,null),true) over(partition by mid_id order by ts)) session_id
            from dwd_page_log
            where dt = '2020-06-14'
        ) t1
    )t2
)t3
group by source, target;

在t3表中的select语句有聚合函数count(*)存在,还有source和target两个字段,如果不适用group by 以这两个字段分组,则会出现错误。
结论:

1.聚合函数和非聚合函数字段同时出现,应该使用group by 对非聚合字段进行分组。
2.如果只有聚合函数可以不使用group by

上面两个结论可自行验证。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值