Fragezeichen: Summe in Auswertung

Hallo Formu

Ich möchte folgendes machen:

Ich habe in einer Mysql-DB eine Tabelle erstellt, in welcher sämtliche Prüfungsnoten pro Schüler abgelegt sind (das Fach lassen wir mal weg).

Ich möchte nun eine Abfrage machen, bei der ich die Durchschnittsnote pro Schüler erhalte. Im weiteren sollte die Abfrage eine Rangliste wie folgt erstellen:

Hans 1,5
Ruth 2
Urs  2,6
etc.

Wie kriege ich das hin?
Danke für Eure Antwort!

Fragezeichen

  1. Moin Fragezeichen,

    Ich möchte nun eine Abfrage machen, bei der ich die Durchschnittsnote pro Schüler erhalte. Im weiteren sollte die Abfrage eine Rangliste wie folgt erstellen:

    Hans 1,5
    Ruth 2
    Urs  2,6
    etc.

    Wie kriege ich das hin?

    haben alle Schüler die gleiche Anzahl Fächer ?
    Wie hast du die Noten pro Schüler gespeichert ?

    Zeig mal die Struktur der Tabele, und wenn's geht auch mit den Typen der Felder.

    Du könntest die Summe der Noten pro Schüler mit sum() aufsummieren und durch die Anzahl der Fächer teilen.

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
    1. Moin!

      Du könntest die Summe der Noten pro Schüler mit sum() aufsummieren und durch die Anzahl der Fächer teilen.

      Könnte man machen. Könnte man aber auch gleich avg() als Funktion nehmen. :)

      • Sven Rautenberg
    2. Zeig mal die Struktur der Tabele, und wenn's geht auch mit den Typen der Felder.

      Tabellebenstruktur:

      ID; INT (14); auto; key
      NAME; VARCHAR (20)
      NOTE; INT (2) -> Kommastellen lassen wir weg

      Die Einträge sind so:

      ID   NAME   NOTE
      1    Hans    1
      2    Ruth    2
      3    Hans    4
      4    Hans    3
      5    Ruth    2
      etc.

      Ich möchte nun eine Abfrage machen, bei der ich die Durchschnittsnote pro Schüler erhalte. Im weiteren sollte die Abfrage eine Rangliste wie folgt erstellen:

      1. Hans 1,5
      2. Ruth 2
      etc.

      Wie kriege ich die Abfrage hin UND wie kann ich mir das Erbebnis anzeigen lassen?

      1. Hallo Fragezeichen

        Tabellebenstruktur:

        ID; INT (14); auto; key
        NAME; VARCHAR (20)
        NOTE; INT (2) -> Kommastellen lassen wir weg

        Die Einträge sind so:

        ID   NAME   NOTE
        1    Hans    1
        2    Ruth    2
        3    Hans    4
        4    Hans    3
        5    Ruth    2
        etc.

        Ich möchte nun eine Abfrage machen, bei der ich die Durchschnittsnote pro Schüler erhalte. Im weiteren sollte die Abfrage eine Rangliste wie folgt erstellen:

        1. Hans 1,5
        2. Ruth 2
          etc.

        Wie kriege ich die Abfrage hin UND wie kann ich mir das Erbebnis anzeigen lassen?

        Folgende SQL-Abfrage würde zum Beispiel die Durchschnittsnoten liefern (für tbl_noten müsstest du deinen Tabellennamen einsetzen)

        SELECT NAME, AVG(NOTE) as DURCHSCHNITT FROM tbl_noten GROUP BY NAME;

        Du kriegst als Ergebnis quasi eine tabelle mit den beiden feldern NAME und durchschnitt, also etwa so:

        NAME  DURCHSCHNITT
        Hans  2.333
        Ruth  2

        Ich werd mal ein kleines PHP-Skript schreiben, dass aus einer Beispieltabelle diese Daten rausholt. Wenn ich fertig bin, meld ich mich per mail und schick dir den PHP-Code

        freundliche Grüße mbr

        1. So: Mini Beispiel steht im Netz. (siehe link)
          Ist wirklich nur das allernotwendigste.
          Die Profis mögen mir eventuelle Ungenauigkeiten nachsehen

          liebe Grüße

          mbr

      2. Wie kriege ich die Abfrage hin UND wie kann ich mir das Erbebnis anzeigen lassen?

        Das müsste so gehen:

        SELECT NAME, AVG(NOTE) AS Durchschnitt
        FROM tabellenname
        GROUP BY NAME
        ORDER BY Durchschnitt

        Du musst bestimmt auch noch eine Formatierfunktion für die Kommastellen einfügen.

  2. Ich möchte nun eine Abfrage machen, bei der ich die Durchschnittsnote pro Schüler erhalte. Im weiteren sollte die Abfrage eine Rangliste wie folgt erstellen:

    Da bieten sich die Aggregat-Funktionen zusammen mit GROUP BY an.
    Für die Rangliste kannst du das Ergebnis einfach per ORDER BY sortieren.

    1. Moin dedlfix

      Da bieten sich die Aggregat-Funktionen zusammen mit GROUP BY an.

      Aus diesem Grund fragte ich nach der Struktur:

      Es könte sein das es so gespeichert ist:

      Hans|1,2|1,5|3,5

      oder so

      Hans|1,2
      Hans|1,5
      Hans|3,5

      je nachdem Bedarf es einer unterschiedlichen vorgehensweise ;-)

      regds
      Mike©

      --
      Freunde kommen und gehen. Feinde sammeln sich an.