首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

group by 多个字段的有关问题

2012-07-31 
group by 多个字段的问题面试的时候碰到一道面试题有一张表,表名:Test表结构:idintnamevarchar(20)有以下

group by 多个字段的问题
面试的时候碰到一道面试题
有一张表,表名:Test 
表结构: 
  id int 
  name varchar(20) 
有以下数据: 
  [id] [name] 
  001 aaa 
  002 aaa 
  003 bbb 
  004 ccc 
要求写一个查询语句,只显示[name]有重复的数据,没有重复的不显示出来。

只显示重复的name的话
我是这样写的:

SQL code
select   count(name)   from     Test   group   by   name   Having   count(name)> 1 
如果要显示重复的name和它所对应的id的话
我是这样写的:
SQL code
select * from test1 where [name] in (select [name] from test1 group by  [name] having count(test1.[name])<>1)
 
上面这两句都能正常查询到结果,然后,我想换种方法去查询重复的name和它所对应的id值 这样写:
SQL code
select id, name from test1 group by id,name having count(test1.name) > 1
但是查询不到相应的结果
我想知道为什么会这样,谁能帮我解答一下?多谢了!

[解决办法]
SQL code
SELECT NAME,IDFROM TEST1 T1WHERE EXISTS(SELECT 1 FROM TEST1 T2 WHERE T2.NAME=T1.NAME AND T2.ID<>T1.ID)ORDER BY NAME,ID
[解决办法]
SQL code
SELECT * FROM TEST AWHERE EXISTS (SELECT 1FROM TESTWHERE NAME = A.NAMEAND ID <> A.ID)
[解决办法]
SQL code
--> 测试数据:[test]if object_id('[test]') is not null drop table [test]create table [test]([id] varchar(3),[name] varchar(3))insert [test]select '001','aaa' union allselect '002','aaa' union allselect '003','bbb' union allselect '004','ccc'select * from test a where exists(select 1 from test b where a.name=b.name and a.id<>b.id)/*id    name001    aaa002    aaa*/--这个结果?
[解决办法]
探讨

引用:
SQL code

SELECT * FROM TEST A
WHERE EXISTS (
SELECT 1
FROM TEST
WHERE NAME = A.NAME
AND ID <> A.ID
)

恩,我想问的是为什么我执行这句 select id, name from test1 group by id,name having count……

[解决办法]
select id, name from test1 group by id,name having count(test1.name) > 1

Group By 后面加两个字段名 分组时按哪一个分组呢。后面家having子句的可以Group by两个字段名么-.-

热点排行
Bad Request.