#成为 SQL 大师#groupby 中不能有聚合函数

背景

复制代码
select 
    t1.p_date,
    t1.member_id,
    top3_domains,
    CASE WHEN label_code = 'realtime' THEN COLLECT_SET(bayes_first) END as realtime_bys
    from 
    create_top3 t1 
    join consume_profile t2 
    on t1.p_date=t2.p_date 
    and cast(t1.member_id as string)=cast(t2.member_id as string)
    group by 1,2,3,4


报错:
aggregate functions are not allowed in GROUP BY, but found CASE WHEN (t2.`label_code` = 'realtime') THEN collect_set(t2.`bayes_first`) END;

原因&解决方案

你遇到的错误是因为在 GROUP BY 子句中,不能包含聚合函数(如 COLLECT_SET)之外的其他列或表达式。在这种情况下,你可以使用子查询来解决问题。以下是一种修改方法:

复制代码
SELECT 
    t1.p_date,
    t1.member_id,
    top3_domains,
    MAX(CASE WHEN t2.label_code = 'realtime' THEN t2.collect_set_bayes_first END) AS realtime_bys
FROM 
    create_top3 t1 
JOIN 
    (
        SELECT
            p_date,
            member_id,
            label_code,
            COLLECT_SET(bayes_first) AS collect_set_bayes_first
        FROM 
            consume_profile
        WHERE 
            label_code IN ('text_bayes_first_realtime', 'text_bayes_first_short_term', 'text_bayes_first_long_term')
        GROUP BY 
            p_date,
            member_id,
            label_code
    ) t2
ON 
    t1.p_date = t2.p_date 
    AND cast(t1.member_id as string) = cast(t2.member_id as string)
GROUP BY 
    1, 2, 3;

声明:本文章有 AI 辅助

相关推荐
2501_9219392611 小时前
MHA高可用
数据库·mysql
_Evan_Yao12 小时前
MySQL 基础:SELECT、WHERE、JOIN 的第一次使用
数据库·mysql
weixin_4440129312 小时前
c++如何将std--vector直接DUMP到二进制文件_指针地址直写【附代码】
jvm·数据库·python
woxihuan12345613 小时前
Go语言中--=运算符详解:位右移赋值操作的原理与应用
jvm·数据库·python
java1234_小锋13 小时前
SpringBoot为什么要禁止循环依赖?
java·数据库·spring boot
神仙别闹13 小时前
基于QT(C++)实现学生成绩管理系统
数据库·c++·qt
m0_6908258213 小时前
如何备份被破坏的数据表_强制跳过错误的导出尝试
jvm·数据库·python
tongyiixiaohuang13 小时前
轻易云平台助力快麦数据入库MySQL
android·数据库·mysql
残 风13 小时前
快速理解什么是MVCC?
数据库·postgresql·oracle·数据库开发
m0_7335654614 小时前
JavaScript中Reflect-ownKeys获取所有键名的优势
jvm·数据库·python