2016-08-07 7 views
-3

Studenten und Noten. Studenten enthält drei Spalten ID, Name und Marken, Noten- (Note, min_mark, max_mark)schreiben Sie eine Frage zu diesem ..?

Ketty gibt Eve eine Aufgabe zum Erstellen eines Berichts mit drei Spalten: Name, Note und Mark. Ketty möchte nicht die NAMEN derjenigen Studenten, die eine Note unter 8 erhalten haben. Der Bericht muss in absteigender Reihenfolge nach Klasse sein - d. H. Höhere Noten werden zuerst eingegeben. Wenn es mehr als einen Schüler mit der gleichen Note (1-10) gibt, ordnen Sie diese Schüler alphabetisch an. Schließlich, wenn die Note niedriger als 8 ist, verwenden Sie "NULL" als ihren Namen und listen sie durch ihre Marken in aufsteigender Reihenfolge auf.

Schreiben Sie eine Anfrage, um Eva zu helfen.

Hinweis Print „NULL“ als Name, wenn der Grad weniger als 8.

ich diese Abfrage geschrieben haben:

select name,grade,marks from students s join grades g on marks between min_mark and max_mark 
where grade>7 
order by 2 desc,name 

select translate(name,name,'NULL'),grade,marks from students s join grades g on marks between min_mark and max_mark 
where grade<=7 
order by 3 desc 

, aber nicht wissen, wie diese beiden Abfragen zu verbinden. Pls help.Thank Sie

+4

so sieht dies wie eine Hausaufgabe – Matt

+0

Die Frage direkt aus HackerRank kopiert – s8129

Antwort

1

Wahrscheinlich so etwas wie dieses:

SELECT CASE WHEN g.grade < 8 THEN NULL ELSE s.name END as name, 
    g.grade, s.marks 
FROM students AS s 
INNER JOIN grades AS g 
ON s.marks BETWEEN g.min_mark AND g.max_mark 
ORDER BY g.grade DESC, s.name; 
+0

Noch ich erhalte Fehler bei der obigen Abfrage. Siehe die Nachricht. https://drive.google.com/open?id=0B5wfPc5KD2JbVHp0MHpGcWhuLXc –

+0

Der Fehler ist für den Code nicht relevant. Haben Sie keine Ahnung, was diese Website von Ihnen erwartet. Bitte geben Sie den Datensatz und die erwarteten Ergebnisse an und prüfen Sie, ob diese Abfrage das Ergebnis liefert. –

+0

ganze Frage https://drive.google.com/open?id=0B5wfPc5KD2JbWXpaaUNPMzRNZVE .. Danke für die Hilfe –

0
SELECT CASE WHEN Grades.Grade < 8 THEN NULL ELSE Students.Name END as name, 
    Grades.Grade, Students.Marks 
FROM Students INNER JOIN Grades 
ON Students.Marks BETWEEN Grades.Min_mark AND Grades.Max_mark 
ORDER BY Grades.Grade DESC, Students.Name; 
0
SELECT CASE WHEN grades.grade < 8 THEN NULL ELSE students.name END 
    as name,grades.grade,students.marks 
from students inner join grades on students.marks between min_mark and max_mark 
order by grades.grade desc,students.name; 
0
select case 
when grade < 8 then NULL 
else 
name 
end 
as name, grade, marks 
from students, grades 
where marks between min_mark and max_mark 
order by grade desc, name asc, marks asc; 
+0

Ein kurzes Code-Snippet benötigt oft Erklärungen, um zukünftigen Lesern nützlich zu sein. Es ist ein bisschen rätselhaft, was für eine JOIN-Bedingung an den beiden Tabellen gelten sollte, aber Sie haben keine Verbindung zwischen "Schülern" und "Noten" geliefert, also ist es ein Schritt zurück von dem ursprünglich gestellten Problem. – hardmath

+0

Danke @hardmath für Ihre Eingabe. Tatsächlich führt die obige Abfrage einen impliziten Join mit der where-Klausel aus. Ich bevorzuge implizite Joins bei expliziten Joins, wenn möglich, –