我的表格和查询如下:
CREATE TABLE test1 (
num NUMBER
);
INSERT INTO test1 VALUES (1);
INSERT INTO test1 VALUES (1);
INSERT INTO test1 VALUES (1);
INSERT INTO test1 VALUES (1);
INSERT INTO test1 VALUES (1);
SELECT COUNT(*) FROM test1;
CREATE TABLE test2 (
num NUMBER
);
INSERT INTO test2 VALUES (1);
INSERT INTO test2 VALUES (1);
INSERT INTO test2 VALUES (1);
INSERT INTO test2 VALUES (1);
INSERT INTO test2 VALUES (1);
SELECT COUNT(*) FROM test2;
SELECT count(*)/"c2" FROM test1, (SELECT count(*) "c2" FROM test2);
DROP TABLE test1;
DROP TABLE test2;
为什么查询1和2返回单个值(5)但是除法(查询3)返回ORA-00937错误?
如果我理解正确count(*)是一个聚合函数,应该返回一个值。
答案 0 :(得分:3)
问题是您尝试在聚合查询中使用没有聚合函数的列c2
。
您可以使用:
SELECT count(*)/MAX("c2")
或:
SELECT count(*)/MIN("c2")
其他方式是:
SELECT (SELECT count(*) FROM test1)
/ (SELECT count(*) FROM test2)
FROM dual ;
或:
SELECT "c1" / "c2"
FROM (SELECT count(*) "c1" FROM test1)
, (SELECT count(*) "c2" FROM test2) ;
或更好地使用CROSS JOIN
:
SELECT "c1" / "c2"
FROM (SELECT count(*) "c1" FROM test1) x1
CROSS JOIN
(SELECT count(*) "c2" FROM test2) x2 ;
答案 1 :(得分:0)
您的查询是:
SELECT count(*)/c2
FROM test1 cross join
(SELECT count(*) as c2
FROM test2
);
这是一个聚合查询,返回一行。外部查询中没有group by
子句。这意味着外部查询中的所有列引用都需要在聚合函数中。
列引用c2
不在聚合函数中。因此,它会产生适当的错误。错误文本解释了这一点:
ORA-00937:不是单组组功能:SELECT count()/“c2”FROM test1,(SELECT count()“c2”FROM test2)
也就是说,c2
不是“单组”群组功能。
换句话说,在子查询中使用聚合不计算在内。