Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL中的范围连接_Mysql_Sql - Fatal编程技术网

Mysql SQL中的范围连接

Mysql SQL中的范围连接,mysql,sql,Mysql,Sql,我是SQL的新手,试图通过解决HackerRank上的问题来学习SQL。这是我一直面临的问题。我有两张桌子 Student : id, name, marks Grades : grade, min_marks, max_marks 从本质上来说,表中给出的分数 1 0 9 2 10 19 ...... 我试图编写以下查询,以生成包含三列的报告:Name、Grade和Mark。成绩低于8分的学生的姓名。报告必须按等级降序排列-即首先输入更高的等级。如果有一个以上的学生被分配到同一个1-10

我是SQL的新手,试图通过解决HackerRank上的问题来学习SQL。这是我一直面临的问题。我有两张桌子

Student : id, name, marks

Grades : grade, min_marks, max_marks
从本质上来说,表中给出的分数

1 0 9
2 10 19
......
我试图编写以下查询,以生成包含三列的报告:Name、Grade和Mark。成绩低于8分的学生的姓名。报告必须按等级降序排列-即首先输入更高的等级。如果有一个以上的学生被分配到同一个1-10年级,请按学生姓名的字母顺序排列。最后,如果分数低于8,则使用NULL作为他们的名称,并按分数升序列出他们

我开始编写查询,因为我在条件语句中丢失了

SELECT NAME, GRADE, MARK
FROM MARKS m
INNER JOIN ON GRADE

有人能帮我从这里走吗。

这应该能让你快到那里了。你问什么并不完全清楚,因为你说你想知道成绩低于8分的学生的名字。然后你说如果分数低于8,就用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

你的要求有冲突。无论如何

获取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

上述问题需要执行两个查询。 我就是这样做的,而且很有效

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;
如果你的问题是, 我只有一个问题的答案:

select case when g.grade>=8 then s.name else NULL end,
g.grade, s.marks from students s, grades g
where s.marks between g.min_mark and g.max_mark
order by g.grade desc, s.name asc, s.marks asc;

你应该尽量不要问与解决这些问题有关的问题。我可以给你答案,但你不会学的。请放下你的论点好吗?老兄,你还没有查询表的名称。选择从mytablename在…上加入MyTherTableName。。。。在ON关键字后面是放置条件的位置,这些条件用于确定一个表中的行是否与另一个表中的行匹配。