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

Oracle SQL中CASE结合LISTAGG与COUNT DISTINCT报错ORA-00979问询

解决ORA-00979错误并实现需求查询

问题分析

ORA-00979错误的核心原因是:SELECT列表中的非聚合列未出现在GROUP BY子句中,或者CASE表达式内的逻辑未正确结合聚合函数使用。你的需求是按tbl.id分组后,根据去重后ntl.number的数量决定返回聚合结果还是固定文本,需要确保GROUP BY子句与SELECT中的聚合逻辑严格匹配。

正确查询写法

SELECT
    tbl.id,
    CASE
        -- 统计分组内去重后的number数量
        WHEN COUNT(DISTINCT ntl.number) > 1 THEN
            -- 聚合去重后的number,按顺序拼接
            LISTAGG(DISTINCT ntl.number, ', ') WITHIN GROUP (ORDER BY ntl.number)
        ELSE
            'test'
    END AS number_output
FROM tbl
-- 补充你的表关联条件,例如tbl与ntl的关联键
JOIN ntl ON tbl.id = ntl.tbl_id
-- 必须按tbl.id分组,确保聚合逻辑基于每个id的分组数据
GROUP BY tbl.id;

关键注意事项

  • GROUP BY子句:必须包含tbl.id,所有聚合函数(COUNT、LISTAGG)都是基于该字段的分组计算的,这是避免ORA-00979错误的核心。
  • DISTINCT的使用:在COUNT和LISTAGG中都添加DISTINCT,确保只统计和聚合去重后的ntl.number值,符合需求逻辑。
  • 表关联逻辑:务必补充正确的关联条件,否则会产生笛卡尔积,导致结果数据异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:50:59