一道sql面试题(查询语句)
id name age
1 a 11
2 b 11
3 c 12
4 d 13
5 e 12
.
.
.
查询age唯一的那一个
这个应该怎么写
满意答案

热心问友 2010-10-14
(
select age from table1 group by age having count(1)>1
)
(
select age from table1 group by age having count(age)>1
)
其他回答(4)

如果不考虑效率,可写为:
select * from T where age in (select age from T group by age having count(id)=1)

小勇 5级 2010-10-14
DECLARE @table TABLE(id int,names varchar(20),age int)
INSERT INTO @table values(1,'a1',11)
INSERT INTO @table values(2,'a2',11)
INSERT INTO @table values(3,'a3',12)
INSERT INTO @table values(4,'a4',13)
INSERT INTO @table values(5,'a5',13)
select * from (
select * from (select count(age) as counts,age from @table group by age) a where
a.counts=1) b,@table c where b.age=c.age
-------------------------------------------------------------
给你一个在查询分析器里运行的结果 你自己稍微一改表名和列名就可以了

select id,name,age from (表名) where age='13'
一道SQL语句面试题,关于group by
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负
如果要生成下列结果, 该如何写sql语句?
日期 胜 负
2005-05-09 2 2
2005-05-10 1 2
补充问题一点:此表中只有两个字段。。。。
除了此种sql语句(select rq, sum(case when
shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0
end)'负' from #tmp group by rq )
其他回答(1)

*开心果* 4级 2008-07-30
select 日期,count("胜") as 胜,count("负") as 负
from 表名
group by 日期
SQL语句 里的order by 、group by、having、where 用在哪里
SQL语句 里的order by 、group by、having、where 应该用在哪里 老混起来
特别是having和where 两个什么区别啊
满意答案

传说の魔法师 7级 2010-03-07
1.order by 是 按字段 进行排序.. 字段后面可跟 desc 降序..asc 升序..默认为升序
2.group by 是进行分组 查询
3.having 和 where 都属于 条件过滤 区别在于 一般having是和 group by 连用...
目的是 分组后进行的条件查询...而如果在group by 前面有where 则是表示 先条件过滤再 分组
这个在实际中 特殊的查询 会影响到查询结果
PS: 这几条关键字 是有先后顺序的.
where.....group by....having.....order by
都是可选..但是如果全部写出来 必须是这个顺序...
- 补充:
- 再说一下.. 只所以需要having 就是因为where 必须是在 group by 前面的..所以 如果是要分组的条件过滤..where是无效的....
- 追问:
-
先执行having再where 还是先where 后having条件?
其他回答(1)

CBA001 11级 2010-03-07
having是和group by 配套用的,
where 是条件,一般都要用到,
order by 是把查询结果排序。
- 追问:
- having好像和where 差不多 都表条件啊 有having能不能有where啊?
-
QL语句中的 Distinct 和 Group by 有什么不同,用那个好?
select Distinct 品名,单位 from [表]和
select 品名,单位 from [表]
Group by 品名,单位查询的结果是一样的,都是把相同的记录合并为一条,这两个有什么不同,用那一个好一点?
其他回答(2)
热心问友
2012-06-19
distinct去除重复,group by根据条件分组查询
热心问友 2012-06-19
我不给你转摘枯燥难读的文章,给你用例子说明:不过,首先我要说:它俩的作用完全不同,如果你只把group by当做去掉重复记录的工具,就太小看它了,
善于使用它,将会为你的工作带来极大的便利,而且能够制作出非常科学高效的报表!
group by主要是用来分组的,怎么个分组呢?
以下用两个例子说明两个使用方面,1是合理的返回合计值(防止笛卡尔积现象),2是用分组来找出重复的记录
====================================================================
★★★例子1:假如有这么一个表:tab_1,它有两个字段:xm、gzlb、je(姓名、工资类别、金额),具体数据如下:xm```````gzlb`````````je
-----------------------------------------
张三`````养老金`````1000
张三`````护理费`````200
张三`````其他```````50.............
李四`````养老金`````800
李四`````其他```````50.............
王五`````养老金`````900
王五`````其他```````35可以看出每个人的工资都是按类别存放的,如果要返回合计的数据,如:
张三``````1250
李四``````850
王五``````935该怎么写SQL呢?初学者往往会这么写:select xm, sum(je) from tab_1;但结果会是什么样呢?结果将是:
张三``````1250
张三``````850
张三``````935
李四``````1250
李四``````850
李四``````935
王五``````1250
王五``````850
王五``````935这是将全部字段都进行了所有的排列组合,即:笛卡尔积!要防止这个情况的发生,我们就可以用到group by(分组)了!
select xm, sum(je)
from tab_1
group by xm;上面的SQL指定了用xm字段分组,这样一来就返回出正确的结果了:
张三``````1250
李四``````850
王五``````935====================================================================
★★★例子2:假设又有这么一个表:tab_2,有这些字段:bh, xm, dah,……(编号、姓名、档案号、……),比如有这样的情况:向该表录入数据的人员非常不认真,重复录入了不少数据,如:
bh``````xm```````dah
------------------------
1```````张三`````10001
2```````李四`````10002
3```````王五`````10003………………
84``````张三`````10001
85``````赵六`````10004………………
126`````王五`````10003
可以看出张三、王五各重复了一次,假设这个表有几万条数据,那么要查出究竟有多少重复的,该怎么查呢?
select bh, xm, dah
from tab_2
group by xm, sfzh
having count(*) >= 2;返回值为:
bh``````xm```````dah
------------------------
1```````张三`````10001
84``````张三`````10001
3```````王五`````10003
126`````王五`````10003解释一下刚才的SQL:是从tab_2表中检索编号、姓名、档案号,怎么检索呢?是用姓名、档案号做为分组,分组的条件是记录数大于等于2的。
这个比喻很形象:having count()语句相对于group by语句,就相当于where语句相对于select语句
====================================================================
所以,group by 这个分组语句是非常有用的一个好东西,还是那句话:善于使用它将会为你的工作带来极大的便利,而且能够制作出非常科学高效的报表!