#成为 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 辅助

相关推荐
Irissgwe1 分钟前
Mysql数据库基础
数据库·c++·mysql·mysql数据库基础
qq_334903155 分钟前
用Python实现自动化的Web测试(Selenium)
jvm·数据库·python
一只努力的微服务15 分钟前
【Calcite 系列】深入理解 Calcite 的 AggregateFilterTransposeRule
大数据·数据库·calcite·优化规则
m0_5180194818 分钟前
使用Python操作文件和目录(os, pathlib, shutil)
jvm·数据库·python
轩情吖18 分钟前
MySQL Connect
数据库·mysql·adb·select·连接·远程访问数据库
lifewange21 分钟前
SQL中的聚合函数有哪些
android·数据库·sql
阿贵---24 分钟前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
稻草猫.24 分钟前
MyBatis-Plus高效开发全攻略
java·数据库·后端·spring·java-ee·mybatis·mybatis-plus
人道领域36 分钟前
Day | 09 【苍穹外卖:订单售后业务】
java·数据库·后端
minji...39 分钟前
Linux 进程间通信(一)进程间通信与匿名管道
linux·运维·服务器·数据结构·数据库·c++