您的位置:首页 > 数据库 > Oracle

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

2017-08-31 17:01 686 查看
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子句。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息