习题(四)— —行遍历

1.(行遍历问题,面试)一道SQL语句面试题,关于group by
表内容:bs
bsrq       res
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负


如果要生成下列结果, 该如何写sql语句?
  bsrq     胜 负
2005-05-09 2  2
2005-05-10 1  2
select bsrq,'胜'=sum(case res when '胜' then 1 else 0 end),
'负'=sum(case res when '负' then 1 else 0 end)
from bs group by bsrq

2.一张表(Grade),里面有3个字段:语文(Chinese),数学(Math),英语(English)。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路): 
   大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。 
       显示格式: 
       语文              数学                英语 
       及格              优秀                不及格
select 语文=(case when 语文>60 then '及格' end),Math=(case when Math>80 then '优秀' end),English=(case when English<60 then '不及格' end)
 
3.请用一个sql语句得出结果
从table1中取出如table2所列格式数据。
如使用存储过程也可以。

table1
月份mon 部门dep 业绩yj
-------------------------------
一月份      01      10
一月份      02      10
一月份      03      5
二月份      02      8
二月份      04      9
三月份      03      8


table2 (result)

部门dep 一月份      二月份      三月份
--------------------------------------
      01      10        null      null
      02      10         8        null
      03      null       5        8
      04      null      null      9

------------------------------------------
select distinct dep,'一月份'=(select yj from table1 where mon='一月份'),'二月份'=(select yj from table1 where mon='二月份'),'三月份'=(select yj from table1 where mon='三月份') from table1 group by dep

4. 已知一个表(Marks)的结构为:
   姓名 科目 成绩
   sname course    grade
   张三 语文  20 
   张三 数学  30 
   张三 英语  50 
   李四 语文  70 
   李四 数学  60 
   李四 英语  90
  
   怎样通过select语句把他变成以下结构:
   姓名 语文 数学 英语
   张三  20   30   50 
   李四  70   60   90

select distinct sname,Chinese=(select grade from Marks where course='Chinese'),Math=(select grade from Marks where course='Math'),English=(select grade from Marks where course='English') from Marks

5.题目2:

问题描述:
S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩

1. 找出没有选修过“李明”老师讲授课程的所有学生姓名

select sname from S where sno not in(select sco from SC where cno=(select cno from C where cteacher='李明'))

2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

select sname,avg(scgrade) from S         group by scgrade having count>2 where scgrade<60

3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名

 select sname from S where sno=(select cno from C where cno=1) and sno=(select cno from C where cno=2)

4. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号???

select sno from SC where grade>(select grade from SC where cno=1 and sno=2)

5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值