我是SQL的新手,并试图通过解决Hackerank上的问题来学习它。这就是我要面对的问题。我有两张桌子
Student : id, name, marks
Grades : grade, min_marks, max_marks
从本质上讲,等级表给出了,
1 0 9
2 10 19
......
我正在尝试编写以下查询,以生成一个包含三列的报告: Name、Grade和Mark。成绩低于8的学生的姓名。报告必须按成绩降序排列--即先输入较高的成绩。如果有多个学生具有相同的成绩(1-10),请按姓名的字母顺序对这些学生进行排序。最后,如果分数低于8,则使用"NULL“作为他们的名称,并按分数升序列出。
我开始编写由am lost at conditional
SELECT NAME, GRADE, MARK
FROM MARKS m
INNER JOIN ON GRADE
有没有人能帮我从这里开始。
发布于 2016-08-09 07:27:01
上面的问题需要执行两个查询。这就是我怎么做的,它起作用了。
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;
我希望这能帮到你
发布于 2017-09-14 02:31:23
如果您的问题是this,我有一个查询答案:
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;
发布于 2016-04-21 15:46:02
您的要求是冲突的。不管怎样。
获取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的学生的姓名为null
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
https://stackoverflow.com/questions/36773234
复制