Tag Archives: sql

解一道SQL问题:找出成绩优秀的学生

今天中午,珠三角技术沙龙官方群(103903642)的Crazy同学给大家出了一道SQL的题目,据说来自某个微群: “SQL开发的一道小问题,一个学校的老师需要评选一组学生作为优秀学生,条件为最多只有2个科目在80-85之间,其他科目在85分以上或者所有科目成绩都在85分以上,表中包含StuId,SubjectId,Score,求最简单且效率最高的语句。 ” 我有点无聊加手欠,就试着解了一下,建立测试用数据表及数据如下,一共有5位同学,4个科目,共20条数据。我的测试环境是老式macbook 402,4G内存,mysql 5.1.42,MyISAM引擎。 我们首先把非优秀学生的条件重新整理一下: 1、凡有一科分数低于80分的,都不能称为优秀学生 2、凡有两科以上分数在80至85分之间的,也不能称为优秀学生 这两个条件是或的关系。 同时整理一下优秀学生的条件: 1、称得上优秀学生的,必须至少所有科目都在80以上。 2、称得上优秀学生的,分数在80至85分的科目必须小于2科。 这两个条件是与的关系。 先找出非优秀学生还是先找出优秀学生,是两种不同的解题思路,下面我分别从这两种思路出发解决问题: 思路一:先找出非优秀的学生,反过来得到优秀的学生 1、首先找出有个别科目分数低于80分的学生 select StuID,count(*) from tb_score where Score < 80 group by StuID 2、然后找出有科目分数在80至85分超过两科的学生 select StuID,count(*) from tb_score where Score between 80 and 85 group by StuID having count(*) >2 … Continue reading

Posted in 技术 | Tagged , | 18 Comments