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

Oracle中用LISTAGG拼接同列min、max值为单行报ORA-00937问题咨询

问题原因

你触发ORA-00937报错的核心原因有两点:

  • min()、max()属于聚合函数,你在查询中同时混用了聚合函数和开窗函数OVER(),但没有定义对应的GROUP BY分组规则,Oracle无法识别聚合计算的维度
  • 你的需求只需要拼接同分组下的最小、最大值,完全不需要用LISTAGG,LISTAGG是用来将多行不同值拼接为字符串的函数,不符合你的使用场景
  • 额外注意:你原SQL中字段名书写错误,表结构中字段为gen_id,你写为了geng_id,执行时需要修正

解决方案

场景1:仅查询指定单个分组的结果(gen_id=1221、pos_id=1234)

直接用聚合函数拼接即可,执行后直接返回单行1.0 m - 4.9 m结果:

SELECT min(Value) || ' - ' || max(Value) AS range_value
FROM TSS_Gen 
WHERE gen_id = 1221 
  AND pos_id = 1234;

如果需要按语言维度拆分分组,在WHERE条件中补充对应的Language过滤条件即可。

场景2:批量查询全表所有分组的范围结果

如果需要返回所有gen_id、pos_id、Language分组对应的范围值,用GROUP BY定义分组维度即可:

SELECT gen_id, 
       pos_id, 
       Language, 
       min(Value) || ' - ' || max(Value) AS range_value
FROM TSS_Gen 
GROUP BY gen_id, pos_id, Language;

补充说明

如果你的Value字段是数值类型,没有内置单位m,可以自行拼接单位,写法调整为:
min(Value) || ' m - ' || max(Value) || ' m'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:39:03