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

xiaoxiao2021-02-28  72

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子句。
转载请注明原文地址: https://www.6miu.com/read-47037.html

最新回复(0)