Quotienten aus WITH CLAUSE und weiterer Summe bilden

Höwedes

Neuer Benutzer
Beiträge
2
Hallo zusammen, ich habe erst vor ein paar Tagen mit SQL angefangen, also bitte nicht böse nehmen, falls das euch hier doof vorkommt.
Ich benutze SQLITEStudio und muss für eine Aufgabe den Durchschnitt aus Notenpunkten(umgerechnet aus Buchstaben in Dezimalzahlen) und den tot_credits aus all den Kursen des Studenten mit der ID 12345.
Folgendes habe ich auf's Papier gebracht:
_____________________________________________________________________
with sum(grade_points) as(

select grade, student.ID, name,

(case when grade='A' then 4

when grade = 'A-' then 3.7

when grade = 'B+' then 3.3

when grade = 'B' then 3

when grade = 'B-' then 2.7

else 'FAIL'

end) as grade_points

from takes, student

where student.ID = takes.ID

group by 1, 2

)

select sum(grade_points)/sum(tot_cred)

where takes.ID = student.ID

and student.ID = 12345
_______________________________________________________
Mein Interpreter versteht tot_cred nicht, obwohl es aus der student relation ist.
Hätte jemand einen Tipp oder einen gänzlichen anderen Vorschlag weil meiner keinen Sinn ergibt?
Dankeschön im Voraus!
 
Werbung:
Es ist nicht so wichtig, welche Umgebung Du verwendest. Interessanter ist Dein Tabellenaufbau. Was ist "Takes"?

Wenn Du mit WITH arbeitest/arbeiten musst, musst Du es im From (unten) auch benutzen. "Else 'Fail'" macht was? Du gibst im Case verschiedene Zahlen aus, im Else Case aber einen Text, welcher Spaltentyp soll daraus werden? (Man darf ja annehmen, dass die möglichen Kurse fest(!) vorgegeben sind, das gehört ins Datenmodell, nicht in eine spätere Abfrage zur Auswertung, dort kann man den Else Case vernachlässigen, wenn vorher alles wasserdicht eingegeben wurde). "with Sum(grade_ponts)" ist wahrscheinlich auch nicht im Sinne des Erfinders.
Versuch mal das Statement Stück für Stück aufzubauen. Immer nur mit einem funktionierden Statement und richtigem (Zwischen)Ergebnis weitermachen. Man SQL auch verschachteln, das finde ich oft ausreichend und übersichtlicher als "with" / CTE
 
Werbung:
Okay, danke für den Tipp. Klingt logisch, war hier einfach eine Übungsaufgabe. Das 'Fail' war lediglich dazu da, damit ich nicht jeden einzelnen Notenschritt nach unten weitermachen musste, i.e. wenn einer schlechter als B- war, fällt er eben im Kurs durch. Das für sich hat aber auch funktioniert.
Hier der Code für die einfache Umrechnung der Noten von Buchstaben in Dezimalzahlen:
select grade, student.ID, name,

(case when grade='A' then 4

when grade = 'A-' then 3.7

when grade = 'B+' then 3.3

when grade = 'B' then 3

when grade = 'B-' then 2.7

else 'FAIL'

end) as grade_points

from takes, student

where student.ID = 12345
___________________________________________________________________
Und hieraus wollte ich dann gerne auf den Quotienten (GPA) aus tot_cred und Notenpunkten, sprcih 4, 3,7 etc. kommen. Tot_credit ist in der Relation STUDENT enthalten und grade in der Relation TAKES.

LG Höwedes
 
Zurück
Oben