Oracel GROUP BY 和 ORDER BY使用一些该注意的问题与细节

本文详细解析了在SQL查询中GROUPBY与ORDERBY的正确使用方式,避免ORA-00920与ORA-00979等常见错误。通过多个示例说明,如何确保ORDERBY字段出现在GROUPBY中,以及WHERE与HAVING子句的正确搭配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GROUP BY 和 ORDER BY一起使用一些该注意的问题与细节


当同时使用GROUP BY和 ORDER BY执行sql出现过[42000][920] ORA-00920: 无效的关系运算符或者是执行后报错ORA-00979:不是GROUP BY 表达式 这两种情况,由于碰到第二次我还是打开了我的搜索引擎来寻求原因,特此记录。📝

🎯示例

--示例表
select *
from AIMS_SECTION;

在这里插入图片描述

📍出现原因情况

  1. GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面,先分组再排序
-- 正确示例
select a.SECTION_NAME,a.SECTION_ID
from AIMS_SECTION a group by a.SECTION_NAME, a.SECTION_ID order by a.SECTION_ID;
  1. group by 和 order by一起使用时order by 的字段必须是order by 中包含的。
--错误示例
select a.SECTION_NAME,a.SECTION_ID
from AIMS_SECTION a group by a.SECTION_NAME, a.SECTION_ID order by a.SORT_ORDER;

在这里插入图片描述

--正确示例
select a.SECTION_NAME,a.SECTION_ID
from AIMS_SECTION a group by a.SECTION_NAME,a.SORT_ORDER, a.SECTION_ID order by a.SORT_ORDER;
  1. 在使用group by 时,有一个规则需要遵守,即出现在select查询列表中的字段,如果没有在组函数中,那么必须出现在group by 子句中。
--错误示例
select *
from AIMS_SECTION a group by a.SECTION_NAME;
--正确
select a.SECTION_NAME,a.SECTION_ID
from AIMS_SECTION a group by a.SECTION_NAME, a.SECTION_ID;
select a.SECTION_NAME,min(a.SECTION_ID)
from AIMS_SECTION a group by a.SECTION_NAME;

  1. 在使用group by 时,where 和 having同时存在注意的点。
  • where不能放在group by后面;

  • having是跟group by连在一起用的,放在group by后面,此时的作用相当于分组后的where过滤,可以接受来自group by,where或者from子句的输入;

  • where后面的条件中不能有聚集函数,但是having可以;

  • where是对每一行进行过滤的,having是对查询出结果集分组后的结果进行过滤;


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值