Teradata SQL左连接查询中如何对非聚合参数执行GROUP BY
Teradata SQL GROUP BY子句补全方案
直接补全方案
你当前内层查询块SELECT c.ID FROM table c LEFT JOIN ...中,除了聚合函数SUM(trx)外,仅有的非聚合列是c.ID,因此GROUP BY子句直接填写c.ID即可符合Teradata语法要求。
同时注意你当前代码存在2处语法顺序/缺失问题需要同步修正:
- 子查询
(SELECT ID, COUNT(*) AS trx) as abc缺少来源表,需要补全对应统计的表名,且该子查询本身用到COUNT聚合,也需要加GROUP BY ID - Teradata要求语法顺序为
WHERE -> GROUP BY -> HAVING -> QUALIFY,你当前写的HAVING在GROUP BY前面,需要调整顺序
修正后完整可运行参考代码
SELECT DISTINCT ID FROM ( SELECT * FROM ( SELECT c.ID FROM "table" c -- 补全子查询的来源表与GROUP BY逻辑 LEFT JOIN (SELECT ID, COUNT(*) AS trx FROM 你的交易表 GROUP BY ID) AS abc ON c.ID = abc.ID WHERE 1=1 AND c.PARAM = 12 -- 建议加表别名避免字段冲突 GROUP BY c.ID -- 补全的GROUP BY子句 HAVING SUM(abc.trx) > 2 QUALIFY ROW_NUMBER() OVER (/* 你的窗口函数分区排序逻辑 */) = 1 ) AS q1 QUALIFY ROW_NUMBER() OVER (/* 你的窗口函数分区排序逻辑 */) = 1 ) AS q2
扩展说明
如果你后续需要在内层SELECT中返回其他非聚合字段(比如用户名称、注册时间等维度字段),需要将这些新增的非聚合字段同步加入GROUP BY列表中。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

