关于sql group by使用的一些注意点

1、GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面。

2、ORDER BY 的字段在GROUP BY 后面必须有

3、在select需要查询的语句中选中的字段,必须出现在group by子句中

4、group by不一定要配合聚合函数,但是如果没有聚合函数,则必须满足第三点

 

group by 阶段之后的所有阶段(having、select、orderby等)的操作对象将是组,而不是单独的行。每个组最终也表示查询结果集中的一行,就是说group by 之后的子句中指定的所有表达式务必保证为每个组只返回一个标量值。而聚合函数只为每个组返回一个值,所以一个元素如果不在group by列表中,就只能作为聚合函数的输入

 

错误示例:

select b.ID,b.scode,b.STITLE,c.S_CITY_NAME,count(*) from test1 a, test2 b, test3 c
where a.ID = b.ID and c.I_STAFF_ID = a.I_STAFF_ID
group by b.ID

oracle报错: ORA-00979: 不是 GROUP BY 表达式

原因:不满足上述第三点

 

改正后:

select b.ID,max(b.scode),max(b.STITLE),max(c.S_CITY_NAME),count(*) from test1 a, test2 b, test3 c
where a.ID = b.ID and c.I_STAFF_ID = a.I_STAFF_ID
group by b.ID

基于字段看实际需求加上聚合函数

 

上一篇:in 和 exists区别


下一篇:MyBatis动态sql常用标签