查询中不同列上的聚合函数的数量有限制吗

  • 本文关键字:函数 有限制 查询 oracle
  • 更新时间 :
  • 英文 :


查询中不同列上的聚合函数数量有限制吗?示例

SELECT SUM(col1), AVG(col2), SUM(col3), ... FROM table;

DB-Oracle

如果是,为什么?

据我所知,没有。你为什么认为有,或者说应该有?

例如,Oracle将表中的列数限制为1000(从19c版本开始(,但这是一个SELECT列列表,无论您在不同的列上使用聚合。

我对Scott的示例模式做了一个测试(你也可以(

create table test (col clob);
declare
l_str varchar2(32000) := 'select ';
l_col varchar2(20);
begin
for i in 1 .. 1010 loop
l_col := case when substr(i, -1) = 1 then 'sum(sal)'
when substr(i, -1) = 3 then 'avg(empno)'
when substr(i, -1) = 5 then 'max(job)'
else 'min(deptno)'
end;
l_str := l_str || l_col ||',';
end loop;

l_str := rtrim(l_str, ',') || ' from emp';
insert into test values (l_str);
end;
/  
select * From test;

结果是这样一个looooong字符串(共1010列(:

select sum(sal),min(deptno),avg(empno),min(deptno),max(job), ... from emp

其返回结果。出于演示的目的,我缩短了查询,因为它在SQL*Plus中不起作用,因为";SP2-0027:输入太长(>2499个字符(-忽略行";。它运行正常,例如TOAD:中有1010列

SQL> select sum(sal),min(deptno),avg(empno),min(deptno),max(job),min(deptno) from emp;
SUM(SAL) MIN(DEPTNO) AVG(EMPNO) MIN(DEPTNO) MAX(JOB)  MIN(DEPTNO)
---------- ----------- ---------- ----------- --------- -----------
29025          10 7726,57143          10 SALESMAN           10
SQL>

所以,没问题。

最新更新