group by 多个字段的有关问题
group by 多个字段的问题
面试的时候碰到一道面试题
有一张表,表名:Test
表结构:
id int
name varchar(20)
有以下数据:
[id] [name]
001 aaa
002 aaa
003 bbb
004 ccc
要求写一个查询语句,只显示[name]有重复的数据,没有重复的不显示出来。
只显示重复的name的话
我是这样写的:
我是这样写的:
上面这两句都能正常查询到结果,然后,我想换种方法去查询重复的name和它所对应的id值 这样写:
我想知道为什么会这样,谁能帮我解答一下?多谢了!
------解决方案--------------------
面试的时候碰到一道面试题
有一张表,表名: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
我是这样写的:
- 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,ID FROM TEST1 T1 WHERE 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 A WHERE EXISTS ( SELECT 1 FROM TEST WHERE NAME = A.NAME AND 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 all select '002','aaa' union all select '003','bbb' union all select '004','ccc' select * from test a where exists(select 1 from test b where a.name=b.name and a.id<>b.id) /* id name 001 aaa 002 aaa */ --这个结果?
------解决方案--------------------
------解决方案--------------------
select id, name from test1 group by id,name having count(test1.name) > 1
Group By 后面加两个字段名 分组时按哪一个分组呢。后面家having子句的可以Group by两个字段名么-.-