PHP&Oracle学习笔记之:group by

发布于: 2008年04月18日

从MySQL转到Oracle之后,group by 变成了我的另外一个噩梦。曾经多么好用的group by, 虽然与distinct作用类似,但是由于在SQL语句位置的不同,可以轻松的得到很多难缠问题的解法。但是在Oracle里面硬生生的变成了一个鸡肋。

在MySQL里面group by 可以随心所欲的在任何场合使用,比如单表查询时:
select id,name,addr from table1 group by addr
或者多表查询时:
select t1.id, t2.name,t2.addr as addr from table1 as t1, table2 as t2 where t1.id=t2.id group by addr
但是这样的写法在oracle里面就会报错,并非因为上一篇提到的as 用法的差异,而是oracle 对group by 用法的苛刻要求。

这里有个英文网页告诉我们

oracle 要求使用group by 时必须与下列统计函数一起使用

AVG
COUNT
FIRST
LAST
MAX
MIN
STDDEV
SUM
VARIANCE

比如
select addr,count(*) from table1 group by addr
列出的结果会对相同的addr字段数据技术
但是,我发现这样写也会报错
select addr,count(*),name from table1 group by addr
当然逻辑上讲,addr一致的时候,不能保证name一致,所以oracle不能判断怎么显示name,所以报错(MySQL能显示第一个找到的name数据),如果一定要写,只能这么写,
select addr,count(*),count(name) from table1 group by addr
当然我看不出这么写还有这么意义。

我找不到一个总结oracle group by 用法的中文网页,如果你也遇到相同的困扰,上面提到的一个英文网页也许能帮到你:http://www.psoug.org/reference/group_by.html

如果你也总结了oracle group by 的用法,希望你不吝于我分享。

本文为寻找人生的起点(http://blog.cn-ic.org)原创,如需转载,请注明出处,并保留原文链接 http://blog.cn-ic.org/?p=83。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

浙ICP备18056264号-1