问一个关于查询重复记录的SQL语句,该怎么解决

问一个关于查询重复记录的SQL语句

假如有这么一张表:

name     sex     age   address
A               男       23      广州
B               男       23      广州
C              女        20      广州
D               女       20      广州
E               女       20      广州
F              男        25      广州

如果想查询出来 sex     age   address  三个字段的值都是相同的,而且相同的记录数总和大于1的,怎么写这句SQL,谢谢
------解决思路----------------------
;with tb as(
select 'A' as name,'男' as sex ,23 as age ,'广州' as address
union
select 'B' as name,'男' as sex ,23 as age ,'广州' as address
union
select 'C' as name,'女' as sex ,20 as age ,'广州' as address
union
select 'D' as name,'女' as sex ,20 as age ,'广州' as address
union
select 'E' as name,'女' as sex ,20 as age ,'广州' as address
union
select 'F' as name,'男' as sex ,25 as age ,'广州' as address

)
select sex,age,address,COUNT( NAME) as 计数 from tb  
GROUP BY sex,age,address
having COUNT(name)>1

------解决思路----------------------
借用一下楼上的脚本,如果想要在查询结果中加上非聚合列(比如这里的name列),可以采用再连接一次表或者窗口函数的方式
不过我感觉窗口函数用起来更好一点

;with tb as(
select 'A' as name,'男' as sex ,23 as age ,'广州' as address
union
select 'B' as name,'男' as sex ,23 as age ,'广州' as address
union
select 'C' as name,'女' as sex ,20 as age ,'广州' as address
union
select 'D' as name,'女' as sex ,20 as age ,'广州' as address
union
select 'E' as name,'女' as sex ,20 as age ,'广州' as address
union
select 'F' as name,'男' as sex ,25 as age ,'广州' as address
 
)
select * from
(
select name,sex,age,address,COUNT( NAME)over(partition by sex,age,address) as cnt from tb  
)t where cnt>1

------解决思路----------------------
if object_id('[TB]') is not null drop table [TB]
create table [TB] (name varchar(1),sex varchar(2),age int,address varchar(4))
insert into [TB]
select 'A','男',23,'广州' union all
select 'B','男',23,'广州' union all
select 'C','女',20,'广州' union all
select 'D','女',20,'广州' union all
select 'E','女',20,'广州' union all
select 'F','男',25,'广州'

select * from [TB]

SELECT  A.*
FROM    dbo.TB A
WHERE   NOT EXISTS ( SELECT 1
                     FROM   dbo.TB B
                     WHERE  a.sex = b.sex
                            AND a.age = b.age
                            AND a.ADDRESS = b.address
                     GROUP BY b.sex ,
                            b.age ,
                            b.ADDRESS
                     HAVING COUNT(1) = 1 )
                            
/*
name sex age address
A 男 23 广州
B 男 23 广州
C 女 20 广州
D 女 20 广州
E 女 20 广州*/

------解决思路----------------------
select sex,age,address,COUNT( NAME) as 计数 from tb  
GROUP BY sex,age,address
having COUNT(*)>1
------解决思路----------------------
create table tb2
(name char(10),
sex char(2),
age int,
address char(10)
)
insert tb2
values('A','男',23,'广州'),
('B','男',23,'广州'),
('C','女',20,'广州'),
('D','女',20,'广州'),
('E','女',20,'广州'),
('F','男',25,'广州')
select age,sex,address,COUNT(name) as 记录总和
from tb2
group by age,sex,address
having COUNT(name)>1
------解决思路----------------------
引用
 如果是下面的数据,结果还是一样
('B','男',23,'广州'),
('C','女',20,'广州'),
('D','女',20,'广州'),
('E','女',21,'深圳'),
('F','男',25,'广州')  

这个的情况,结果怎么会一样呢?
结果是
'女',20,'广州',2