求每门课程成绩都大于80分的学生-数据库-IT技术博客

求每门课程成绩都大于80分的学生

时间:2019-08-14 11:14:23 浏览: 字体: 放大 缩小


现有一张student学生表,保存有相应的课程成绩

id name classes grade

1 张三         语文         90

2 张三         数学         80

3 张三         英语         95

4 李四         语文         91

5 李四         数学         88

6 李四         英语         95

7 王五         语文         92

8 王五         数学         70

9 王五         英语         83


用一条sql语句,那把门课程成绩都大于或等于80的学生姓名打印出来


mysql> use test;
Database changed

mysql> CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `classes` varchar(50) DEFAULT NULL,
  `grade` int(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=gbk;
Query OK, 0 rows affected (1.20 sec)

mysql> insert into student(name,classes,grade) values
('张三','语文',90),
('张三','数学',80),
('张三','英语',95),
('李四','语文',91),
('李四','数学',88),
('李四','英语',95),
('王五','语文',92),
('王五','数学',70),
('王五','英语',83);
Query OK, 9 rows affected (0.38 sec)
Records: 9  Duplicates: 0  Warnings: 0


上面是在数据库test下建表student,并插入相应的记录,根据上面的记录,张三和李四的成绩是符合的,王五虽然参加了三门课程,但数学成绩是70分,不符合要求。怎样显示每门课程成绩大于等于80分以上的学生呢?如果有一科大于80分的不算,如果有三门课程,但这个学生只参加了两门课程也算,只有每门课程都参加,而且每门课程成绩不低于80才符合要求,现在下面尝试写一下sql语句,我采用的是分组的形式来实现,条件是分组后的每门课程每小成绩也大于等于80分,参与的课程数目是3


mysql> SELECT `name` from student GROUP BY `name` HAVING  MIN(grade)>=80 and count(classes)=3;
+------+
| name |
+------+
| 张三 |
| 李四 |
+------+
2 rows in set (0.05 sec)
mysql>


标签: 课程成绩学生sql