sqlserver 数据库面试题目

    今天参加完面试,遇到了一些sql题,现把这些题目一一列出,希望有人看到,如果你在面试过程中碰巧遇到此类问题,那么就直接秒杀吧,哈哈。

    首先简历一个stuscore表。其中name为姓名,subject为科目,score为成绩。

  create table stuscore(
         name varchar(20),
         subject varchar(20),
         score int
     )

    1、查找出有两门成绩小于60分的学生的所有成绩的平均成绩

    思路:首先求出有两门成绩小于60分的学生姓名,然后在求其平均成绩

  select name,avg(score) from stuscore where name in
    (select name from stuscore where score < 60 group by name having count(*) >= 2)
group by name

    2、查询每个学生最大分数的科目及分数

    思路:首先获取每个学生最大的分数值,然后在连接查询

select a.name,a.subject,a.score from stuscore a,
    (select name max(score) score from stuscore group by name) b
where a.name = b.name and a.score = b.score

    3、-- 行列转换

select name as '姓名',
       max(case subject when '语文'  then score else 0 end) as '语文',
       max(case subject when '数学' then score else 0 end) as '数学',
       max(case subject when '英语' then score else 0 end) as '英语'
from stuscore group by name

    说明:这里加上max函数的原因是group by name。具体可以看下group by的用法以及注意事项

    



 

 

    

转载于:https://my.oschina.net/u/1474079/blog/279676

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值