oracle里group by 和having count的问题

哎,水平太菜,一直搞不懂group by 之类的问题。
我有一张表a里面有字段xh,xm,dz,hm,sj等等还有其他很多字段。
因为hm可能重复,xm也有可能重复。
我只想查询hm有重复的记录,其中要有xh,xm,hm字段,dz和sj字段不要。
我的理解是:
hm可能有重复,难道不是group by hm 吗?然后having coun(hm)>1
为什么老提示,要么不是group by表达式,要么语法没问题,查询不出记录,
但是我不用group by和having count直接查出明细来,就明显有重复的记录在那里。
不知道到底错在哪。
如果我想查询hm和xm都有重复,那又该怎么理解

--1,查询hm有重复的记录
select hm,count(*) from a group by hm having count(*)>1
--2,查询hm和xm都有重复
select hm,xm count(*) from a group by hm,xm having count(*)>1

追问

我还要其他字段

追答--1,查询hm有重复的记录
select a.* from a,(select hm,count(*) from a group by hm having count(*)>1) b where a.hm=b.hm
--2,查询hm和xm都有重复
select a.* from a,(select hm,xm count(*) from a group by hm,xm having count(*)>1) b where a.hm=b.hm and a.xm=b.xm

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-27
select后面除了组函数的查询项都得放到group by子句后面,having 子句的作用是筛选满足条件的组,即在分组之后过滤数据.语句这样写:
select xh,xm,hm from a group by xh,hm,xm having count(hm)>1
第2个回答  2013-09-27
hm有重复 是group by hm having count(hm)>1
但它返回的是去重的hm 例如
hm有两个重复值 10 但查询它只返回一个10
所以要查xh,xm,hm必须 使用
select xh,xm,hm from a where hm in(select hm from a group by hm having count(hm)>1)追问

关键是我查的时候一条记录都返回不了 我举得例子只是把我的代码简化了 其实还有很多关联 比如你的括号里的hm是很多关联后取到的字段

追答

最好把你的语句简要贴出来,这样才好给你解释

相似回答