查询中不同列上的聚合函数数量有限制吗?示例
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>
所以,没问题。