我有一个Oracle查询,它有一些影响
有计数(字段)> (返回一行的长SQL语句) 查询的两个方面都是单独工作,但我在一起得到了“不是一个分组”的表达方式。
当用一个数字替换长SQL语句时,它可以工作,但是如果只返回一行,我认为这两个是等价的吗?
修改 做了一些游戏后我意识到: ...表T ...具有计数(字段)> (表A中的长SQL语句,其中A.field = T.field) 当我用T.field的任何特定选项替换T.field时它起作用,但是当我特别引用T.field时,我得到相同的“不是按表达式分组”
答案 0 :(得分:1)
当Oracle解析您的查询时,它不知道查询是仅返回一行还是一堆行。因此,只需将group by your_column
附加到查询的末尾即可。
例如,此查询返回一行:
select count(*) from user_objects;
但是,如果我想要包含sysdate,我必须这样做
select
sysdate the_date,
count(*)
from
user_objects
group by
the_date;
答案 1 :(得分:0)
SELECT ...
FROM Table T ...
GROUP BY T.afield
HAVING Count(T.anotherfield)
> (Long SQL statement with Table A Where A.somefield = T.afield)
应该可以正常工作。
SELECT ...
FROM Table T ...
GROUP BY T.anotherfield
HAVING Count(T.anotherfield)
> (Long SQL statement with Table A WHERE A.somefield = T.afield)
不应该工作。 T.afield
列表中未包含的字段(如GROUP BY
)无法在SELECT
,HAVING
或ORDER BY
子句中引用。只能引用该字段的聚合函数 - 例如,您可以使用WHERE A.somefield = MIN(T.afield)
。