日期:2014-05-20  浏览次数:20765 次

几道SQL笔试题目
CSS code


(1)表名:购物信息
购物人      商品名称     数量
A            甲          2
B            乙          4
C            丙          1
A            丁          2
B            丙          5
……
查询出购物人购买了两种或两种以上物品 的购物信息
效果如下:
        购物人      商品名称     数量
        A            甲          2
        A            丁          2
        B            乙          4
        B            丙          5
        ....



(2)表名:成绩表
姓名   课程       分数
张三     语文       81
张三     数学       75
李四     语文       56
李四     数学       90
王五     语文       81
王五     数学       100
王五     英语       49
……

查询出成绩全部合格的学生信息(包含姓名、课程、分数),注:分数在60以上评为合格


(3)成绩表
学生id        课程id     课程分数
1                1           5
1                2           6
2                1           4
2                2           3
3                1           4
3                2           5 
.....
查询出 课程 1  比课程 2 分数高的所有学生的学号

(4) 赛事表  tmp
    rq(日期)         sf(胜负)      
   2005-05-09          胜
   2005-05-09          负
   2005-05-09          胜
   2005-05-09          负
   2005-05-09          负
   2005-05-10          胜
   2005-05-10          胜
   2005-05-10          负

要求 , 查询出每天的胜负情况 , 结果如下:
     rq(日期)          胜       负
   2005-05-09          2        3
   2005-05-10          2        1
 




------解决方案--------------------
试下能做对几个·
(4)
select rq,
sum( case when sf='胜' then 1 else 0 end ) as '胜',
sum( case when sf='负' then 1 else 0 end ) as '负'
from tmp
group by rq

(3)
select 学生id from 成绩表 a where 学生id in(select 学生id from 成绩表 b where b.课程id>a.课程id and b.课程分数>a.b.课程分数 group by 学生id)
------解决方案--------------------
(2)
第二题,学生ID都没有一个。。。重名怎么算?
咱假设它名字就先当于ID·要不没法做了·
select * from 成绩表 t where 姓名 not in(select 姓名 from 成绩表 where 分数<60)


------解决方案--------------------
(1)
select distint(商品名称),sum(数量) from tb where exists(select 购物人,商品名称 from tb where 数量>0 group by 购物人,商品名称 having count(购物人)>1 ) group by 商品名称
------解决方案--------------------
1、
select 购物人,商品名称,数量 from 购物信息 where 购物人 in (
select 购物人 from 购物信息 group by 购物人 having count(购物人) > 1
)
order by 购物人,商品名称 desc

2、
select * from 成绩表 where 姓名 not in (
select 姓名 from 成绩表 where 分数 < 60
)

写前两个吧。
表名,字段名千万别用中文了,太不方便。
------解决方案--------------------
LZ 发到 数据库版里,得到的答案可能会更专业。
------解决方案--------------------
同意楼上,
------解决方案--------------------
mark下 以后会用到
------解决方案--------------------
第三题:

select * from 成绩表 a inner join 成绩表 b on a.id=b.id and a.课程id<b.课程id and a.课程分数>b.课程分数