帮忙解答一道SQL面试题

BankingRegulatorLLM 2010-10-19 11:10:55
题目是网上早就有的。
题目是这样的:
一道SQL语句面试题,关于group by
表内容:2005-05-09 胜
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
------------------------------------------



他的结果是这样的:create table #tmp(rq varchar(10),shengfu nchar(1))

insert into #tmp values('2005-05-09','胜')
insert into #tmp values('2005-05-09','胜')
insert into #tmp values('2005-05-09','负')
insert into #tmp values('2005-05-09','负')
insert into #tmp values('2005-05-10','胜')
insert into #tmp values('2005-05-10','负')
insert into #tmp values('2005-05-10','负')

select * from #tmp
select rq, shengfu from #tmp group by rq,shengfu
select rq, shengfu from #tmp group by shengfu,rq
select rq, shengfu,sum(shengfu) from #tmp group by shengfu,rq

1)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


蓝色部分是答案,我试了,SQL句执行错误,
请朋友给下答案,因为对case when不了解。
...全文
165 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
buryMyLove 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fengjssy 的回复:]
改过来了,结果是出来了。但是

SQL code
sum(case when shengfu='胜' then 1 else 0 end) "胜",


这是什么用法???
[/Quote]


见9楼我的回复~如果是Oracle,可以用decode函数
buryMyLove 2010-11-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhou925290547 的回复:]
sum(case when shengfu='胜' then 1 else 0 end) "胜" 中的'1'和'0'是什么意思啊?
[/Quote]


如果胜,这列为1,否则为0;比如胜3负2,就是3个1,2个0;再一sum,等于3,就是你胜的场次
gelyon 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fengjssy 的回复:]
改过来了,结果是出来了。但是

SQL code
sum(case when shengfu='胜' then 1 else 0 end) "胜",


这是什么用法???
[/Quote]

SQL分组后根据不同胜负来分组求和的
case when 用法
  • 打赏
  • 举报
回复
改过来了,结果是出来了。但是
sum(case when shengfu='胜' then 1 else 0 end) "胜",


这是什么用法???
心中的彩虹 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wkc168 的回复:]
引用楼主 fengjssy 的回复:
题目是网上早就有的。
题目是这样的:
一道SQL语句面试题,关于group by
表内容:2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负

如果要生成下列结果, 该如何写sql语句?

胜 负
20……
[/Quote]
要想列名含特殊符号用双引号 不含就什么都不加
心中的彩虹 2010-10-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 fengjssy 的回复:]
题目是网上早就有的。
题目是这样的:
一道SQL语句面试题,关于group by
表内容:2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负

如果要生成下列结果, 该如何写sql语句?

胜 负
2005-05-09……
[/Quote]


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

--or
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



youshang444 2010-10-19
  • 打赏
  • 举报
回复
select rq,
sum(decode(shengfu,'胜',1,0) '胜',
sum(decode(shengfu,'负',1.0) '负'
from tmp
group by rq
ngx20080110 2010-10-19
  • 打赏
  • 举报
回复

create table tmp(rq varchar2(10),shengfu nchar(1));

insert into tmp values('2005-05-09','胜');
insert into tmp values('2005-05-09','胜');
insert into tmp values('2005-05-09','负');
insert into tmp values('2005-05-09','负');
insert into tmp values('2005-05-10','胜');
insert into tmp values('2005-05-10','负');
insert into tmp values('2005-05-10','负');

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

--
RQ 胜 负
--------------- ---------- ----------
2005-05-10 1 2
2005-05-09 2 2

#號不能作為oracle的表名使用
別名要用雙引號
Diza1986 2010-10-19
  • 打赏
  • 举报
回复

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



列的重命名不要加引号阿
orachow 2010-10-19
  • 打赏
  • 举报
回复
sum(case when shengfu='胜' then 1 else 0 end) "胜" 中的'1'和'0'是什么意思啊?

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧