You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks SQL含子查询与Group By报错:需添加至Group By或用first()包裹

问题原因

Databricks SQL(基于Spark SQL)的GROUP BY规则比MS SQL更严格:SELECT子句里所有非聚合的列必须出现在GROUP BY中。你的原查询在外层直接用ts_inititals作为concat_ws的参数,但既没把它放进GROUP BY,也没包裹在聚合函数里,这就违反了规则,导致报错。

修正方案

要把同一个activityid对应的所有ts_inititals拼成逗号分隔的字符串,得先用聚合函数把这些值收集起来,再做拼接。常用的聚合函数有两个:

  • collect_list:保留重复值(如果同一个用户多次关联到同一个活动)
  • collect_set:自动去重(每个用户只出现一次)

保留重复值的版本

SELECT
    activityid,
    concat_ws(', ', collect_list(ts_inititals)) AS attendees
FROM baseorigination.activityparty
LEFT JOIN baseorigination.systemuser
    ON activityparty.partyid = systemuser.systemuserid
WHERE ts_inititals IS NOT NULL -- 过滤掉未匹配到用户的空值
GROUP BY activityid;

去重版本

SELECT
    activityid,
    concat_ws(', ', collect_set(ts_inititals)) AS attendees
FROM baseorigination.activityparty
LEFT JOIN baseorigination.systemuser
    ON activityparty.partyid = systemuser.systemuserid
WHERE ts_inititals IS NOT NULL
GROUP BY activityid;

补充说明

原查询里的子查询完全没必要,直接在主查询里关联两张表再聚合就行。加WHERE ts_inititals IS NOT NULL是为了避免LEFT JOIN时没找到用户导致的空值混入结果,防止最终字符串出现多余的逗号。

内容的提问来源于stack exchange,提问作者Patterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:01:38