Oracle有>单行

时间:2011-10-16 23:24:35

标签: sql oracle group-by having

我有一个Oracle查询,它有一些影响

有计数(字段)> (返回一行的长SQL语句) 查询的两个方面都是单独工作,但我在一起得到了“不是一个分组”的表达方式。

当用一个数字替换长SQL语句时,它可以工作,但是如果只返回一行,我认为这两个是等价的吗?

修改 做了一些游戏后我意识到: ...表T ...具有计数(字段)> (表A中的长SQL语句,其中A.field = T.field) 当我用T.field的任何特定选项替换T.field时它起作用,但是当我特别引用T.field时,我得到相同的“不是按表达式分组”

2 个答案:

答案 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)无法在SELECTHAVINGORDER BY子句中引用。只能引用该字段的聚合函数 - 例如,您可以使用WHERE A.somefield = MIN(T.afield)