SQL> desc tab1
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
NAME VARCHAR2(1000)
SQL> select * from tab1;
ID NAME
---------- ---------------
1 a
2 b
3 c
SQL> select * from tab1 where id > AVG(id);
select * from tab1 where id > AVG(id)
*
ERROR at line 1:
ORA-00934: group function is not allowed here
SQL>
错误非常清楚,并表示无法做到这一点。但我不明白为什么。该查询非常有意义:
选择
tab1
值id
大于平均值的所有行
AVG 和其他聚合函数适用于数据集。WHERE 原因不能访问整个集合,只能访问它正在操作的行的数据。如果您创建了自己的 AVG 函数(作为普通函数而不是自定义聚合函数),则在从 WHERE 子句调用时只会传递一个 ID 值,而不是整个 ID 值集。
Mezmo 的解决方案会给你预期的结果,但如果你想避免两次全表扫描(假设没有索引),你可以使用这样的窗口函数:
嗯,简短的回答是“因为拉里这么说。” ;) 但您可以使用嵌套选择:
高温高压