【发布时间】:2014-01-07 20:31:41
【问题描述】:
我正在尝试将 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';
有什么建议吗?
编辑我的字段的数据类型似乎有些棘手。
-
T_ID是VARCHAR2 -
A.V是VARCHAR2 -
B.T是CLOB
【问题讨论】:
-
不要将苹果(数字)与橙子(字符串)进行比较。
'1.00'是一个字符串,它不是是一个数字 -(1.00或1)是一个数字。 -
@a_horse_with_no_name 你说得对,现在好多了 :) 但我仍然遇到 932 错误,看起来像 oracle 期望的一些数据类型并得到一个 CLOB insteab - 这是 B.T 的类型
-
您不能在
CLOB列上创建group by- 为什么需要它?如果你需要一个 max() 那么CLOB听起来不像是正确的数据类型。如果您将数字存储在LOG.V中,那么为什么不将其定义为number?。在varchar列中存储数字是一个非常糟糕的设计。 -
A.V 不是 CLOB,只有 B.T 是 :) 我知道糟糕的设计不是我的,我暂时无法更改
-
为什么我知道你的回答是“这不是我的设计,我无法改变它”。显然没有人创建过这样的表,但几乎每个人都必须使用它们——这是数据库设计的一个谜。