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 返回一个数字列或计算列总和
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子句