首页 > 数据库技术 > 详细

关于【MySQL 子查询——查询最大值】的补充说明

时间:2020-05-05 16:54:06      阅读:88      评论:0      收藏:0      [点我收藏+]

昨天在使用子查询查找最高分和最低分时遇上了一点问题,情况是这样的:如果找到的最高分或最低分是唯一值则不会有什么问题,但如果有其它班级学生的成绩恰好与查询的最高分或最低分相同时就会把那个学生的信息也显示出来,这并不是我们想要的结果。如:

mysql> select * from studscoreinfo
-> where total_scores in (select max(total_scores) from studscoreinfo where grade_classes = 301);
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
| Id | Grade_Classes | Seat_Numbers | Names | Chinese_Scores | Math_Scores | English_Scores | Total_Scores | Score_Averages | Remarks |
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
| 20 | 201 | 3 | 赖晓玲 | 84 | 83 | 88 | 255 | 85 | |
| 31 | 301 | 1 | 陈增光 | 77 | 88 | 90 | 255 | 85 | |
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
2 rows in set (0.04 sec)

用之前的方法这里虽然能找到301班最高分的学生,但却把与之同总分另一个学生的信息也显示出来,这并非我们想要的。

又如查询最低分时也遇到了类似的问题:

mysql> select * from studscoreinfo
-> where total_scores in (select min(total_scores) from studscoreinfo where grade_classes = 101);
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
| Id | Grade_Classes | Seat_Numbers | Names | Chinese_Scores | Math_Scores | English_Scores | Total_Scores | Score_Averages | Remarks |
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
| 10 | 101 | 10 | 赖丹蕊 | 58 | 88 | 63 | 209 | 69.7 | |
| 65 | 501 | 5 | 吴裕奇 | 65 | 66 | 78 | 209 | 69.7 | |
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
2 rows in set (0.00 sec)

这里找到了101班总分最低分的学生,却也把501班一个与她同部分的学生信息也显示出来了。

解决方法很简单,都只是增加一个过滤条件就好。

1、查询最高分:

mysql> select * from studscoreinfo
-> where grade_classes = 301
-> and total_scores in (select max(total_scores) from studscoreinfo where grade_classes = 301);
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
| Id | Grade_Classes | Seat_Numbers | Names | Chinese_Scores | Math_Scores | English_Scores | Total_Scores | Score_Averages | Remarks |
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
| 31 | 301 | 1 | 陈增光 | 77 | 88 | 90 | 255 | 85 | |
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
1 row in set (0.00 sec)

这里加上了与子查询同过滤条件的语句‘where grade_classes = 301’就可以精准地找了指定的301班总分最高分的学生了。

2、查询最低分:与查询最高分一样,也要增加同过滤条件的语句就好。实例如下:

mysql> select * from studscoreinfo
-> where grade_classes = 101
-> and total_scores in (select min(total_scores) from studscoreinfo where grade_classes = 101);
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
| Id | Grade_Classes | Seat_Numbers | Names | Chinese_Scores | Math_Scores | English_Scores | Total_Scores | Score_Averages | Remarks |
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
| 10 | 101 | 10 | 赖丹蕊 | 58 | 88 | 63 | 209 | 69.7 | |
+----+---------------+--------------+-----------+----------------+-------------+----------------+--------------+----------------+---------+
1 row in set (0.00 sec)

关于【MySQL 子查询——查询最大值】的补充说明

原文:https://www.cnblogs.com/comnet/p/12830524.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!