2016-04-04 38 views
1

在Oracle数据库中,可以指定所有数据GROUP BY中的所有列的语法

SELECT sum(price) 
FROM tabA 
GROUP BY() 

我的理解是GROUP BY子句可以省略,但如果我们有明确的,将完整形式是GROUP BY()的一个单组?这取自GROUPING SETS的文档。

我记得有一次看过GROUP BY NULL有相同的意思。这是对的吗?否则GROUP BY NULL是什么意思?

回答

2

通过()进行聚合与没有值聚合或恒定值相同。 例如:

create table test_group(cod varchar2(16), descr varchar2(16), num number); 
insert into test_group values ('a', 'letter A', 10); 
insert into test_group values ('b', 'letter b', 20); 
insert into test_group values ('b', 'letter B', 35); 
insert into test_group values ('c', 'letter c', 70); 
insert into test_group values ('c', 'letter c', 99); 

聚集的任何值

SQL> select sum(num) 
    2 from test_group; 

    SUM(NUM) 
---------- 
     234 

聚集的null

SQL> select sum(num) 
    2 from test_group 
    3 group by null; 

    SUM(NUM) 
---------- 
     234 

聚集的()

SQL> select sum(num) 
    2 from test_group 
    3 group by(); 

    SUM(NUM) 
---------- 
     234 

聚集的恒定值:

SQL> select sum(num) 
    2 from test_group 
    3 group by 'constant'; 

    SUM(NUM) 
---------- 
     234 

你必须明确地写你的汇集条件:

SQL> select * 
    2 from test_group 
    3 group by *; 
group by * 
     * 
ERROR at line 3: 
ORA-00936: missing expression