几道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.课程分数