`
lshh83
  • 浏览: 159428 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

sql面试题

阅读更多
昨天去滨江的一个公司面试,遇到一个数据库的题目,总结下
    题目是这样的:
name  score
小明   胜
小明   胜
小李   负
小李   负
小明   负
小李   胜
小李   胜


要求结果是:
姓名   胜    负
小明   2     1
小李   2     2

回来写了下,也不是很难,但当时写的确实不准确,大概有个思路,但还是错了
   正确的写法应该是:
1.select name 姓名,sum(decode(score,'胜',1)) 胜,
sum(decode(score,'负',1)) 负 from tt group by name
2.select t.name 姓名,t.c_1 胜,a.c_f 负 from 
(select distinct tt.name,b.c_1 from tt
 left join (select name,count(1) as c_1 from tt where score='胜' group by name) b on tt.name = b.name ) t
 left join (select name,count(1) as c_f from tt where score='负' group by name) a on t.name=a.name
3.sql server的写法
select name,sum(case when score='胜' then 1 else 0 end) 胜,sum(case when score='负' then 1 else 0 end) 负 from tt group by name


分享到:
评论
3 楼 lshh83 2012-06-10  
decode函数是oeacle特有的,具体功能如下:
DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )   Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 。
2 楼 fenfenxu 2010-04-08  
oracle的呀,晓得了。
mysql有像是的:if()
博主第一题构思很巧妙
select name,sum(if(score='fu',1,0)) fu,sum(if(score='sheng',1,0)) sheng
from score
group by name;
1 楼 fenfenxu 2010-04-08  
请问decode(,,)是什么函数啊?

相关推荐

Global site tag (gtag.js) - Google Analytics