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子句。
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 分组函数用法示例详解
- oracle中分组排序函数用法
- oracle中分组排序函数用法 - 转
- oracle常用函数详解(详细)
- Oracle中常用的to_Char用法详解(有FMT的详细列表)
- Oracle分析函数 OVER(PARTITION ORDER WINDOWING)(四)—— 多维度分组统计函数用法
- ORACLE-SQL积累(查询外检约束、记录长度、字段长度、启用禁用触发器、case用法、分组连接函数、查询被锁表)
- oracle中分组排序函数用法
- Oracle ltrim() rtrim() 函数详细用法
- group by分组函数之rollup与cube用法
- oracle常用函数详解(详细)
- oracle常用函数详解(详细)
- strcpy函数用法详细解释
- oracle中分组排序函数用法
- Oracle中常用的to_Char用法详解(有FMT的详细列表)
- oracle分组函数详解(转)
- Oracle中常用的to_Char用法详解(有FMT的详细列表)
- Oracle中常用的to_Char用法详解(有FMT的详细列表)
- Oracle 中 decode 函数用法详解
- strcpy函数用法详细解释和其相关问题