我是SQL的新手,并试图通过解决Hackerank上的问题来学习它。这就是我遇到的问题。我有两张桌子
Student : id, name, marks
Grades : grade, min_marks, max_marks
基本上,成绩表给出了
1 0 9
2 10 19
......
我尝试编写以下查询,以生成包含三列的报告:名称,成绩和标记。收到等级低于8的学生的NAMES。报告必须按年级降序排列 - 即先输入更高的成绩。如果分配了相同年级(1-10)的学生不止一个,请按字母顺序按名称命名这些学生。最后,如果等级低于8,请使用" NULL"作为他们的名字,并按他们的标记按升序排列。
我开始通过条件
丢失来编写查询SELECT NAME, GRADE, MARK
FROM MARKS m
INNER JOIN ON GRADE
有人可以帮助我如何离开这里。
答案 0 :(得分:2)
上述问题需要执行两个查询。 这就是我做的方式,它的工作原理
select students.name,grades.grade,students.marks
from students
inner join grades
on students.marks between min_mark and max_mark
and grades.grade > 7
order by grades.grade desc,students.name;
select 'NULL',grades.grade,students.marks
from students
inner join grades
on students.marks between min_mark and max_mark
and grades.grade < 8
order by grades.grade desc,students.marks asc;
我希望这会有所帮助
答案 1 :(得分:2)
如果您的问题是this, 我有一个查询答案:
Node.js
答案 2 :(得分:1)
您的要求存在冲突。无论如何。
获取具有较低晒黑等级8的学生的数据,名称为
SELECT
s.name
, g.grade
, s.marks
FROM Student s,Grades g
where s.marks BETWEEN g.min_marks and g.max_marks
and g.grade < 8
ORDER BY g.grade DESC, s.name ASC
如果您希望该名称对于年级低于8的学生为空
SELECT
NULL //or ''
, g.grade
, s.marks
FROM Student s,Grades g
where s.marks BETWEEN g.min_marks and g.max_marks
and g.grade < 8
ORDER BY g.grade DESC
答案 3 :(得分:0)
这应该让你几乎到了那里。你所要求的并不完全清楚,因为你说你想要收到等级低于8的学生的名字。然后你说如果等级低于8,则使用NULL作为他们的名字。根据这些要求,所有学生姓名都为NULL。
SELECT
s.name
, g.grade
, s.marks
FROM Student s
JOIN Grades g on s.marks BETWEEN g.min_marks and g.max_marks
WHERE g.grade < 8
ORDER BY g.grade DESC, s.name ASC