转载自
[url] http://blog.163.com/wkyuyang_001/blog/static/10802122820091745135193/[/url]
ORA-00979 不是 GROUP BY 表达式”这个错误,和我前面介绍的另外一个错误ORA-00937一样使很多初学oracle的人爱犯的。
我在介绍使用聚合函数中用group by来分组数据时特别说明了select 列表项中不存在的列可以出现在group by的列表项中,但反过来就不行了,在select列表项中出现的列必须全部出现在group by后面(聚合函数除外)
但一些朋友经常爱把select 列表项的中列忘了写在group by中。于是就出现了以上的错误ORA-00979 不是 GROUP BY 表达式。
Oracle的中文错误提示信息翻译得非常不到位,面对着不是 GROUP BY 表达式很多朋友摸不着头脑,不知道oracle在说什么。
例如下面的例子就会出现这个错误:
SQL> select deptno,job,avg(sal)
2 from emp
3 group by deptno;
select deptno,job,avg(sal)
*
ERROR 位于第 1 行:
ORA-00979: 不是 GROUP BY 表达式
这里就是因为在select 列表像中出现了像deptno和job,而在group by中并没有出现的缘故。
以上的错误纠正为:
Select deptno,job,avg(sal) from emp
Group by deptno,job;
分享到:
相关推荐
标题 "ORA-00979 不是group by 表达式" 提及的是一个在使用SQL查询时常见的错误,通常出现在尝试执行聚合操作(如COUNT、SUM、AVG等)而没有正确指定GROUP BY子句的情况下。在SQL中,当你在SELECT语句中包含非聚合...
### ORA-01791: 不是SELECTed表达式 如果在查询中使用了未在SELECT列表中出现的表达式,将遇到此错误。确保所有使用的表达式都出现在SELECT列表中。 ### ORA-01792: 表或视图中的最大列数为1000 表或视图中的列数...
GROUP BY或ORDER BY子句中超过1000个表达式。减少表达式数量以符合限制。 8. ORA-00964: 表不在FROM列表中。确保在选择列表中引用的所有表都在FROM子句中定义。 9. ORA-00965: 不允许'*'作为列别名。在SQL语句中...
使用了GROUP BY但未包含所有非聚合列,或在HAVING子句中使用了非分组函数。 15. ORA-00942:表或视图不存在 引用的表或视图在数据库中找不到,检查表名和权限。 16. ORA-00947:没有足够的值(一般是插入语句出现...
1. 分组和聚合函数:GROUP BY用于分组数据,聚合函数如COUNT(), SUM(), AVG()等用于计算每个组的统计信息。 2. 联接操作:JOIN用于合并来自两个或更多表的数据,如INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER ...
SELECT id, wmsys.wm_concat(name) AS name FROM idtable GROUP BY id; ``` 这段代码的结果将返回每个`id`对应的`name`列值的汇总字符串,如`10`对应的`name`列值为`'ab,bc,cd'`,而`20`对应的`name`列值为`'hi,ij,...
当遇到错误如ORA-01791和ORA-00938时,应检查SQL语句的语法,确保所有的函数都有足够的参数,所有的表达式都是有效的SELECTed表达式。 SQL优化方面,建议避免使用通配符'*'来选择所有列,因为它可能导致不必要的...
- 方法1:通过`GROUP BY`和`HAVING`子句找出出现多次的ID。 - 方法2:利用`MIN(ROWID)`或`MAX(ROWID)`排除每个组中已存在的ROWID。 - 删除重复记录: - 对于大量重复记录,可以先找出具有多个实例的ID,然后...
2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能删除数据行; 3.在视图不出现下列情况时可通过视图修改基表数据或插入数据: a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字; b.使用...
##### 6.2 Groupby 和 having 子句 - 使用 `HAVING` 子句可以在分组后进一步筛选数据。 - 示例:`SELECT DEPARTMENT, COUNT(*) AS EMP_COUNT FROM MY_TABLE GROUP BY DEPARTMENT HAVING COUNT(*) > 5;` ##### 6.3...
SELECT column1, LISTAGG(column2, ', ') WITHIN GROUP (ORDER BY column2) FROM table_name GROUP BY column1; ``` 这将根据`column1`的值对记录进行分组,并用逗号和空格连接每个组内的`column2`。 4. **...
- **解释**: 如果在执行一系列操作后发现某些错误,可以通过`rollback`命令撤销这些更改,使数据库恢复到事务开始之前的状态。 **14. 提交** - **命令**: `commit;` - **功能**: 将更改永久保存到数据库中。 - ...
- `SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > 10;` ##### 7.5 GROUPING函数 - **GROUPING**:用于分组查询中的特殊功能。 #### 八、高级子查询 ##### 8.1 成对子...
Oracle SQL查考手册是一部关于Oracle数据库查询语言的重要参考资料,它涵盖了运算符、表达式、条件、函数以及常见的SQL DDL(Data Definition Language)和Clause等内容。这篇总结将深入解析这些核心概念,帮助读者...
- **GROUP BY**: 对结果集按照一个或多个列进行分组。 **1.19 子查询** - **简单子查询**: 在一个查询中嵌套另一个查询。 - **相关子查询**: 外层查询的每行都需要执行内层查询。 **1.20 替换变量** - **&**: ...
- 伪列如ROWNUM、ROWID、ORA_ROWSCN等,它们不是实际列,但在查询时提供特定信息。 19. **delete与truncate的区别**: - `delete` 删除数据但保留表结构和索引,记录会被标记为已删除,可能占用空间。 - `...
- 示例: `select department, sum(salary) as total_salary from employees group by department having total_salary > 100000;` ##### 6.3 数据分组总结 - **分组总结**: 综合使用 `group by` 和 `having` 子句...