oracle 分组函数与group by正确用法详解与详细解释

oracle数据库 分组函数与group by正确用法详解与详细解释

1.查询时同时查询了分组函数列和非分组函数列就需要使用group by,但是仅仅查询分组函数列可以不结合group by使用。
SQL> select TABLESPACE_NAME,sum(user_bytes/1024/1024) from dba_data_files;
ERROR at line 1:
ORA-00937: not a single-group group function

not a single-group group function报错原因是:用了分组函数,除了分组以外的列都要写在group by子句中;
加入 group by后不再报错:
SQL> select TABLESPACE_NAME,sum(user_bytes/1024/1024) from dba_data_files group by tablespace_name;
TABLESPACE_NAME       SUM(USER_BYTES/1024/1024)
------------------------------ -------------------------
SYSAUX     459
UNDOTBS1      69
USERS       4
SYSTEM     799

2.如果不是把除了分组以外的所有列写到group by子句仍然会报错:
SQL> select TABLESPACE_NAME,sum(user_bytes/1024/1024), FILE_ID from dba_data_files group by tablespace_name;
select TABLESPACE_NAME,sum(user_bytes/1024/1024), FILE_ID from dba_data_files group by tablespace_name                                                 *
ERROR at line 1:
ORA-00979: not a GROUP BY expression

下面把除了分组以外的所有列写到group by子句,就可以正常查询了:
SQL> select TABLESPACE_NAME,sum(user_bytes/1024/1024), FILE_ID from dba_data_files group by tablespace_name,FILE_ID;
TABLESPACE_NAME       SUM(USER_BYTES/1024/1024)    FILE_ID
------------------------------ ------------------------- ----------
USERS       4  7
SYSAUX     459  3
UNDOTBS1      69  4
SYSTEM     799  1

3.group by子句一定要与分组函数结合使用,否则没有意义。
SQL> select TABLESPACE_NAME,user_bytes/1024/1024 from dba_data_files group by tablespace_name; 
ERROR at line 1:
ORA-00979: not a GROUP BY expression

4.group by 子句中的列不必包含在SELECT列表中,
SQL> select sum(user_bytes/1024/1024) from dba_data_files group by file_id;
SUM(USER_BYTES/1024/1024)
-------------------------
     749
     549
   4
 312.125
     104


    但是如果查询列中出现了其他非分组函数列就会报错:
SQL> select TABLESPACE_NAME,sum(user_bytes/1024/1024) from dba_data_files group by file_id;
ERROR at line 1:
ORA-00979: not a GROUP BY expression


===============关于分组函数的介绍:
分组函数的语法:
SELECT [column,] group_function(column), ... 
FROM table 
[WHERE condition]
[GROUP BY column]
[ORDER BY column];

分组函数作用于一组数据,并对一组数据返回一个值.
常见的分组函数有:
count 返回找到的记录数
min   返回一个数字列或计算列的最小值
max   返回一个数字列或计算列的最大值
sum   返回一个数字列或计算列总和

avg   返回一个数字列或计算列的平均值

================关于group by子句

Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。 如果在查询的过程中需要按某一列的值进行分组,以统计该组内数据的信息时,就要使用group by子句。不管select是否使用了where子句都可以使用group by子句。

你可能感兴趣的:(oracle 分组函数与group by正确用法详解与详细解释)