DB_group_by_数据库分组函数的用法总结

 

Oracle_SQL_group_by Oracle SQL group by 分组函数的用法总结

 

需要在Oracle中用group by语句,发现有些理解并不是太到位。

翻看自己总结的Informix数据库关于group by的使用注意事项,发现跟Oracle是一样的。

 

同时google一下网上其他人的总结,发现有些总结并不到位。

 

例如1:http://hi.baidu.com/ws528/blog/item/ded717d9236c412b11df9baa.html 中写到: 只要字段不带有聚合函数的都要加入到group by 的字段中“。

这个原则是对的,但是没有说到实质内容,仅仅形式上对了。

 

例如2:http://blog.csdn.net/zhaozhongju/archive/2009/05/13/4177047.aspx 中写到:”Group By子句与Where子句是不兼容的“。

这本身是个错误。不过如果永远不在group by中写where是不会出错的哦~

 

group by 总结

 

 

例子:

select order_num, sum(total_price)

from items

where order_num > 1018 and quantity > 2

group by order_num

having order_num > 1012 and sum(total_price) > 1000.0

;

 

形式:

select clm_a, clm_b, … , FUNK_A(clm_x)

from tbl_x

where clm_y… clm_z…

group by clm_a, clm_b, …

having clm_a… or FUNK_A(xxx)=…

order by group_column

 

总结:

过程: select * where  -->> group + function -->> having

1select  + where 选出要进行处理的行;where中的列不受group中的列限制;

2 group by 条件确定可以 group 的行,这些行之后将要用统计函数 FUNK_A 统计这些行

3group 操作使得可 group 的行仅仅显示一行,并用统计函数分组统计

4having 条件对group结果进行条件过滤

           如同 where 对select的结果过滤一样; 不可用别名

5 ) order by 条件必须是group中存在的;如果有having则order by必须放在having之后 ;

注意:

1select 中的列 是 group 中的列 的子集( select 后写的列必须在 group 中出现),但不包括分组函数

2 )因为初选时用 * ,所以 where 中可以出现任何列,统计函数中也可以出现任何列

3having 是在 group 之后进行的,所以 having 出现时必须有 group ,同时 having 中的列必须在 select 中出现 ; 同时不能用列的别名

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值