如何在Oracle的CLOB列上使用GROUP BY?

Xav*_*ier 9 sql oracle group-by max

我试图GROUP BY在oracle 中将函数与MAX 结合起来.我阅读了很多文档,试着弄清楚如何格式化我的请求,Oracle总是返回:

ORA-00979:"不是表达的群体"

这是我的要求:

SELECT A.T_ID, B.T, MAX(A.V) 
FROM bdd.LOG A, bdd.T_B B
WHERE B.T_ID = A.T_ID
GROUP BY A.T_ID
HAVING MAX(A.V) < '1.00';
Run Code Online (Sandbox Code Playgroud)

有小费吗 ?

编辑它似乎有一些棘手的部分我的字段的数据类型.

  • T_IDVARCHAR2
  • A.VVARCHAR2
  • B.TCLOB

小智 12

我非常熟悉为其他人设计的表格编写查询以完成与您想要的完全不同的事情的现象.当我遇到同样的问题时,我已经习惯了.

GROUP BY TO_CHAR(theclob)
Run Code Online (Sandbox Code Playgroud)

然后你当然也要TO_CHAR在输出中使用clob.

请注意,这个问题有2个级别......首先是你有一个不需要clob的clob列; 它只包含一些适合的小字符串VARCHAR2.我的解决方法适用于此.

第二级是您实际上想要按包含大字符串的列进行分组.在那种情况下,TO_CHAR可能无济于事.

  • 如果 clob 超过 4000 个字符,则不起作用。 (3认同)

Xav*_*ier 1

经过一些修复后,主要问题似乎出在group by

您必须在SELECT和 中使用相同的表GROUP BY

我还只使用 CLOB 的一个子字符串来使其正常工作。工作要求是:

    SELECT TABLE_A.ID,
       TABLE_A.VA,
       B.TRACE
FROM
(SELECT A.T_ID ID,
          MAX(A.V) VA
   FROM BDD.LOG A
   GROUP BY A.T_ID HAVING MAX(A.V) <= '1.00') TABLE_A,
                                                                BDD.T B
WHERE TABLE_A.ID = B.T_id;
Run Code Online (Sandbox Code Playgroud)