对原文章:https://blog.youkuaiyun.com/hou_miao/article/details/78854470,https://blog.youkuaiyun.com/crazygolf/article/details/38989461 进行整理
一.学生表(学生id,姓名,性别,分数)student(s_id,name,sex,score)
班级表(班级id,班级名称)class(c_id,c_name)
学生班级表(班级id,学生id)student_class(s_id,c_id)(考察三表联查)
1.查询一班得分在80分以上的学生。
答:select * from student s where score > 80 and s.s_id in (select sid from student_class where c_id=(select c_id from class where c_name='一班' )
2.查询所有班级的名称,和所有班中女生人数和女生的平均分
答:select c.c_name,女生人数=sum(s.s_id),女生平均分=avg(s.score) from student inner join student_class sc on s.s_id = sc.s_id and inner join class c on sc.c_id = s.c_id where s.sex='女'
二.一道SQL语句面试题,关于group by表内容:(考察group by 和 case when )
info 表
date result
2005-05-09 win
2005-05-09 lose
2005-05-09 lose
2005-05-09 lose
2005-05-10 win
2005-05-10 lose
2005-05-10 lose
如果要生成下列结果, 该如何写sql语句?
win lose
2005-05-09 2 2
2005-05-10 1 2
答:select date,sum(case when result='win' then 1 else 0 end) as 'win' ,sum(case when result='lose' then 1 else o end)as 'lose' from info group by date
三.表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列