【发布时间】:2017-05-11 19:05:28
【问题描述】:
Semesters Table
+----+------+
| ID | Name |
+----+------+
| 1 | 1st |
| 2 | 2nd |
+----+------+
Subjects Table
+----+-------------+-------------+
| ID | Semester Id | Name |
+----+-------------+-------------+
| 1 | 1 | Mathematics |
| 2 | 1 | English |
| 3 | 2 | Mathematics |
| 4 | 2 | English |
+----+-------------+-------------+
Tests Table
+----+------------+-------+
| ID | Subject ID | Score |
+----+------------+-------+
| 1 | 1 | 70 |
| 2 | 1 | 75 |
| 3 | 2 | 75 |
| 4 | 2 | 70 |
| 5 | 3 | 75 |
| 6 | 3 | 70 |
| 7 | 4 | 70 |
| 8 | 4 | 75 |
+----+------------+-------+
我可以通过在测试 ID 上使用 MAX 来获得第二次测试的分数,然后按主题 ID 对它们进行分组。但是,我必须得到按学期分组的最低分数。
是否有可能在单个 SQL 语句中获得每学期最低分数的第二次测试?
结果集如下所示。
+----------+-------------+-------+
| Semester | Subject | Score |
+----------+-------------+-------+
| 1st | English | 70 |
| 2nd | Mathematics | 70 |
+----------+-------------+-------+
这是在 MySQL 中。
【问题讨论】:
-
MySQL。我考虑过创建视图然后加入视图,但是当有数百个测试时,这可能会出现问题。
-
order by something desc limit 2以something的值为您提供两个最低的结果。请注意,如果有几个同样低的值,您不会以这种方式获得所有值。请考虑使用analytical functions。 -
您的示例只有两个测试。为什么“第二”不是最低限度?你怎么处理领带?