ora 中的SQL语句:group by后的条件对查询结果有何影响?

举个例子说吧:
select barcode,sum(qty) from tab_c group by cID having sum(qty) >3;
select barcode,reason_code,sum(qty) from tab_c group by cID,reason_code having sum(qty) >3;
这两个句子查询到的结果不一样。但是去不清楚为什么。请大家指教。

如果有group子句,则将结果表按group中指定的列进行分组,该属性列值相等的元组为一组,通常会在每组中作用集函数。
接你上述的例子,假定先将having条件去除;
第一条语句是按barcode字段分组,进行求和;
第二条语句是按barcode,reason_code进行了分组,进行求和统计查询,这时的结果记录与第一条就已经不一样。
而having条件的作用限定分组求和记录值要大于3,在两条语句中作用是一样的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-07
查询语句很清楚了
1 查询以cID做为分组的 累加qty列的值,过滤条件是 累加值大于 3
2 查询以cID和reason_code 作为分组的列 ,累加qty的值,过滤条件是累加值 大于3

这2个查询结果肯定不一样的,因为分组不一样,第一个 只要 cID 不同就可以看做是不同的分组了,第二个 是cID 或者 reson_code不同 就会视为不同的分组
第2个回答  2013-03-07
上面这两个sql语句能执行???
group by 就是分组 不过在select 后面的有的列名才能 放在group by后面,
上面你的第一个sql语句是按照cid分组
第二个是先按照cid分组,在按照reason_code分组.
第3个回答  2013-03-07
1 个是按cID分组,1个是按照cID,reason_code分组..两个能一样吗?

...在oracle里报错:ORA-00979: 不是 GROUP BY 表达式
group by 之后的查询结果没有你的order by的字段,所以才出的这个错.使用group by之后,只能查询以group by分组字段有单一值对应的字段,同样order by也只能以可以查询出来的字段来排序.你把order by后面的字段改成和group by的字段一致就不会出这个错了,但是估计就达不到你原来的要求了....

请问这句sql查询为什么报ORA-00979: 不是 GROUP BY 表达式错误?
错误的,你要查询d.*的话,GROUP BY后面必须包括dept 表的所有字段。如果你只GROUP BY e.deptno,那么,这样写:SELECT e.deptno,avg(sal)FROM emp e JOIN dept dON e.deptno=d.deptnoGROUP BY e.deptnohaving avg(sal)=(select min(avg(sal)) from emp group by deptno)

oracle数据库查询报错:ORA-01427: 单行子查询返回多个行
nvl是一个标量函数,在你的SQL语句中,nvl第一个参数是一个子查询。而该子查询是按日期统计用户登录的次数(group by t.riqi),如果查询范围在一天之内,因为t.riqi就是一个值,子查询的结果集中只有一条记录,是没有问题的;而如果查询的日期范围超出1天,且有用户在不同的日期有登录,那么子查...

ORA-01446: 无法使用distinct, group by 等子句从试图中选择rowid或...
语句里主查询中用了 * 号,而 * 号包含了rowid,而主查询的数据源是子查询,主查询并不存在rowid,因此出现了ORA-01446错误。解决方法:在子查询中rowid取别名。例:select rownum,rowid id,... ...

oraclesql index会影响检索结果排序么
\/ 1024 \/ 1024 \/ 1024 AS GB FROM dba_segments; 查询模式或者用户的大小 以 MB 为单位给出用户的空间大小 SELECT SUM (bytes \/ 1024 \/ 1024) "size" FROM dba_segments WHERE owner = '&owner'; 查询数据库中每个用户最后使用的 SQL 查询 此查询语句会显示当前数据库中每个用户最后使用的 SQL 语句。

SQL中只要用到聚合函数就一定要用到group by 吗?
SQL中只要用到聚合函数就不一定要用到group by。聚合函数是对一组值执行计算,并返回单个值,也被称为组函数。 聚合函数可以应用于SELECT 查询语句的 GROUP BY 子句的HAVING子句中,但不可用于WHERE语句中,因为WHERE是对逐条的行记录进行筛选。

...在oracle里报错:ORA-00979: 不是 GROUP BY 表达式
查询结果中使用的字段和order by中使用的字段都要放到group by中

oracle12c:SQL 错误: ORA-00979: 不是 GROUP BY 表达式
having我记得写的是组过滤的条件,我觉得你应该是要先连接查询,再分组,如果分组后还需要过滤就写having子句,如果不需要就不写having子句 SELECT COMPANY.STATE, COUNT(BILLS.NAME), SUM(BILLS.AMOUNT) FROM BILLS, COMPANY where COMPANY.NAME = BILLS.NAME GROUP by COMPANY.STATE ;...

sql查询语句问题请教?
GROUP BY t2.FNUMBER, t3.FNAME 这个查询将会在F_ORA_FEEDBACKDATE小于'2023-01-01'时,将XXX的值放入'23年前工时'这个字段,当F_ORA_FEEDBACKDATE大于或等于'2023-01-01'时,将XX的值放入'二三年后工时'这个字段。注意这里的XXX和XX应该是你的实际字段或者计算表达式。如果日期不在这个范围,...

java.sql.SQLException: ORA-00979: 不是 GROUP BY 表达式
用group by的话不能select a.需要取某个字段的min, max, avg, sum之类的。假如除了sum(je)这个以外,其他字段不重要的话,你给指定字段并且套个min函数试试。

相似回答