加入SQL范围

时间:2016-04-21 14:51:49

标签: mysql sql

我是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

有人可以帮助我如何离开这里。

4 个答案:

答案 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