资源描述:
《groupby子句及其扩展》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、GROUPBY子句GROUPBY子句主要用于对WHERE中得到的结果进行分组,也就是说它是在WHERE子句之后执行,对经过WHERE筛选后的结果按照某些列进行分组,之后进行相应的处理工作。SpecifytheGROUPBYclauseifyouwantthedatabasetogrouptheselectedrowsbasedonthevalueofexpr(s)foreachrowandreturnasinglerowofsummaryinformationforeachgroup.当使用聚集函数的时候,除非对整个语句的查询结果集进行聚集运算
2、,否则都要通过指定GROUPBY子句来确定是对某类结果集进行聚集运算。请看下面的例子:17:11:10SQL>selectcount(object_name)numfromt; --这里是对整个表进行count运算,不会出错。 NUM------ 5059917:11:17SQL>selectcount(object_name)numfromtwhereSTATUS='VALID';--这里对返回来的所有结果进行count运算,不会出错。 NUM-----5057817:12:00SQL>selectowner,status,count(ob
3、ject_name)numfromt;--这里是想对owner和status进行分组,计算出它们的count(object_name)值,没有使用groupby来显示分组,出错。selectowner,status,count(object_name)numfromt *ERRORatline1:ORA-00937:notasingle-groupgroupfunction17:13:36SQL>selectowner,status,count(object_name)numfromtgroupbyowner,status;OWNER
4、 STATUS NUM----------------------------PUBLIC VALID 19968CTXSYS VALID 339..............................NING VALID 1PUBLIC INVALID 19ORDSYS VALID 166928rowsselected.17:23:13SQL>selectowner,status,count(object_name)numfromtgroupbyowner,sta
5、tus,temporary;--这里多出了表t中的列temporaryOWNER STATUS NUM----------------------------WMSYS VALID 1SCOTT INVALID 2..............................ORDSYS VALID 1669HR VALID 34IX VALID 5335rowsselected.17:29:06SQL>selectowner,status,count(ob
6、ject_name)numfromtgroupbyowner;--GROUPBY子句的内容少了status列selectowner,status,count(object_name)numfromtgroupbyowner *ERRORatline1:ORA-00979:notaGROUPBYexpression可以看到,如果想对某一类结果集进行聚集运算,就必须通过GROUPBY来指定这类结果集,我们还可以看到以下两个特点:1、ExpressionsintheGROUPBYclausecancontainanycolumnsofth
7、etables,views,ormaterializedviewsintheFROMclause,regardlessofwhetherthecolumnsappearintheselectlist.2、在SELECT列表中,除非是函数(主要是聚集函数)、常量以外,其他所有的列名或者表达式(在GROUPBY中必须也要是表达式的原样而不能是它的别名),都必须要在GROUPBY子句中出现。3、TheGROUPBYclausegroupsrowsbutdoesnotguaranteetheorderoftheresultset.Toordertheg
8、roupings,usetheORDERBYclause.使用GROUPBY子句还有下面一些的限制:1、你不能在子句中使用LOB/VARRAYS/NE