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

Oracle SQL按group_number分组拼接rate值至table_2新列报错如何解决

报错原因

你写的SQL触发了聚合查询的语法约束:使用GROUP BY分组时,SELECT子句里只能出现两类内容:GROUP BY指定的分组字段、聚合函数的计算结果。你用了SELECT *会取出date、c_id等非分组也非聚合的字段,自然会触发"not a group by expression"报错。
另外你当前的写法只处理了table_1的拼接逻辑,还没有和table_2关联,无法直接得到目标结果。

正确实现方案

实现逻辑:先对table_1按group_number分组,先对同分组下重复的c_id记录去重,再拼接rate值,最后将拼接结果和table_2按group_number关联即可。

支持LISTAGG的数据库(Oracle 11g+、PostgreSQL 11+、Hive等)写法:

SELECT 
  t2.date,
  t2.group_number,
  t1_group.rate_for_groups
FROM table_2 t2
LEFT JOIN (
  SELECT 
    group_number,
    LISTAGG(rate, ', ') WITHIN GROUP (ORDER BY c_id) AS rate_for_groups
  FROM (
    -- 去重同分组下相同c_id的重复记录,避免拼接出重复值
    SELECT DISTINCT group_number, c_id, rate 
    FROM table_1
  ) t1_distinct
  GROUP BY group_number
) t1_group ON t2.group_number = t1_group.group_number;

MySQL 8.0+/MariaDB写法(对应替换为GROUP_CONCAT函数):

SELECT 
  t2.date,
  t2.group_number,
  t1_group.rate_for_groups
FROM table_2 t2
LEFT JOIN (
  SELECT 
    group_number,
    GROUP_CONCAT(rate ORDER BY c_id SEPARATOR ', ') AS rate_for_groups
  FROM (
    SELECT DISTINCT group_number, c_id, rate 
    FROM table_1
  ) t1_distinct
  GROUP BY group_number
) t1_group ON t2.group_number = t1_group.group_number;

执行上述SQL后输出结果和你给出的期望结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:09:01