日期:2014-05-17  浏览次数:20706 次

分组函数遇到的问题
表A  字段 id   name 
需要查询结果:显示有重复姓名的信息及重复条数

id   name   count(name)

目前我试验的一种方式可以查出这个结果:
select id ,name, con from A,(select count(name) con from A group by name having count(name)>1) 

但记得曾经有人指导过有其他写法,貌似直接在前边加个(select 。。。。)就可以,本人技术有限,没能领会其意,望高手给丢个方法吧
------解决方案--------------------
WITH  TEST as ( 
SELECT '1' as a,'A' AS b from dual 
union all
SELECT '1' as a,'A' AS b from dual 
union all
SELECT '2' as a,'B' AS b from dual 
union all
SELECT '3' as a,'C' AS b from dual 
union all
SELECT '3' as a,'C' AS b from dual 
)
select * from (
SELECT A,B,COUNT(*) as result FROM TEST GROUP BY A,B) where result >1

是不是这样子?
------解决方案--------------------
感谢回复啊,感觉道行很深啊,不过是不是有更简单一点的写法呢,或者说包括我写的那个,哪个写法最简单
------解决方案--------------------
SELECT A,B,COUNT(*) as result FROM TEST GROUP BY A,B having COUNT(*) >1

这个应该最少的吧。
------解决方案--------------------
这个写法不对啊,查的条数不是name的,而是联合的条数
------解决方案--------------------
算了,要下班了,结贴吧,就这么写了自认为没更简单的了

select id ,name, m.con from A,(select count(name) as con from A group by name having count(name)>1) m;
------解决方案--------------------
是不是这个?

select * from (select id,name,count(name)over(partition by name)as con from A ) where con>1