我正在努力解决这个挑战.
问题涉及两个表:
Students
和Grades
。 Students
表有列:ID
、Name
和 Marks
,而 Grades
表有列 Min_Mark
、Max_Mark
和 Grade
。
问题表述如下:
Ketty 给 Eve 一个任务来生成包含三列的报告:姓名、等级和标记。凯蒂不想要那些成绩低于 8 分的学生的姓名。报告必须按成绩降序排列——即首先输入较高的成绩。如果分配给同一年级 (8-10) 的学生不止一名,则按姓名字母顺序对这些特定学生进行排序。最后,如果成绩低于8,则用“NULL”作为他们的名字,并按成绩降序排列。如果分配给他们的同年级 (1-7) 不止一名学生,请按分数升序排列这些特定学生。
在尝试解决这个挑战时,我写了以下查询:
SELECT s2.Name, g.Grade, s1.Marks
FROM Students s1
JOIN Grades g
ON s1.Marks >= g.Min_Mark AND s1.Marks <= g.Max_Mark
LEFT JOIN Students s2
ON s2.ID = s1.ID AND g.Grade >= 8
ORDER BY g.Grade DESC, s2.Name, s1.Marks
其中输出为:
Belvet 10 96
Britney 10 95
Heraldo 10 94
Julia 10 96
Kristeen 10 100
Stuart 10 99
Amina 9 89
Christene 9 88
Jane 9 87
Salma 9 81
Samantha 9 87
Scarlet 9 80
Vivek 9 84
Aamina 8 77
Belvet 8 78
Julia 8 78
Paige 8 74
Priya 8 76
Priyanka 8 77
NULL 7 64
NULL 7 66
NULL 6 55
NULL 4 34
NULL 3 24
由于查询未被接受,我尝试通过修改上述查询的
SELECT
部分来调查JOIN操作的正确性:
SELECT s2.Name, g.Grade, s1.Marks, s2.id, s1.id, s2.marks
FROM Students s1
JOIN Grades g
ON s1.Marks >= g.Min_Mark AND s1.Marks <= g.Max_Mark
LEFT JOIN Students s2
ON s2.ID = s1.ID AND g.Grade >= 8
ORDER BY g.Grade DESC, s2.Name, s1.Marks
然后我很惊讶地看到输入中的一些记录具有不同的
s1.Marks
和 s2.Marks
值,尽管 JOIN 条件是 s1.ID = s2.ID
。例如:
Belvet 10 96 21 21 78
这是什么原因?