GROUP BY: Wie Tupel mit 0 erhalten ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • GROUP BY: Wie Tupel mit 0 erhalten ?

    Moin Leute,

    ich habe eine Datenbank zur WM2006 und muss dafür eine VIEW erstellen, die alle Vorrundenspiele mit ihren Ergebnissen listet. Dafür wollte ich erstmal 2 Views bauen die die Tore der jeweiligen Mannschaften listen, weil man in MySQL in einer VIEW keine Subselects verwenden kann.

    Das funktioniert soweit auch ganz gut. Problem ist nur, dass bei der Gruppierung diejenigen Mannschaften rausfallen, die in einem Spiel 0 Tore geschossen haben.

    Hier das Query dazu:

    Code:
    SELECT s.SpielID, s.Runde, s.Mannschaft1, COUNT(*) AS Tore
        FROM Spiele s, Tore t, Spieler sp
            WHERE s.Runde LIKE 'Group %'
                AND t.SpielID = s.SpielID
                AND t.SpielerNR = sp.SpielerNR
                AND ( 
                      (sp.Land = s.Mannschaft1 AND t.Spielsituation != 'own goal') 
                        OR* 
                      (sp.Land = s.Mannschaft2 AND t.Spielsituation = 'own goal')
                    )
    GROUP BY s.SpielID
    ;
    Also was ich damit erreichen möchte sind im Prinzip erstmal alle Mannschaften und die Tore, die sie erzielt haben pro Spiel ( inklusive Eigentore der anderen Mannschaft ). Das klappt auch wie gesagt fehlen nur die Tupel wo das COUNT(*) 0 ergibt. Wie kann ich dafür sorgen, dass die erhalten bleiben ?

    Im Anhang noch ein SQL-Dump der Datenbank.

    Danke euch schonmal im Vorraus.
    Angehängte Dateien
    Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

  • #2
    Versuch mal die Tabelle "Tore" mit einem LEFT JOIN dranzujoinen, und nicht per INNER JOIN. Da du wahrscheinlich (ich habe mir den Dump nicht angeschaut) für Spiele mit 0 Toren keinen Treffer in der Tabelle "Tore" bekommst, kommt natürlich auch kein Ergebnis zurück, das du mit count(*) zählen könntest.
    [color=red]Geht nicht[/color] ist keine Fehlermeldung

    Kommentar


    • #3
      Hi,

      wenn Du SUM statt COUNT verwendest, kannst Du auch die Tore beider Mannschaften, sprich das Spielergebnis bekommen:

      Code:
      SELECT s.SpielID, s.Runde, s.Mannschaft1, s.Mannschaft2, 
         SUM(
            sp.Land = s.Mannschaft1 AND t.Spielsituation != 'own goal' 
            OR sp.Land = s.Mannschaft2 AND t.Spielsituation = 'own goal'
         ) AS tore1,
         SUM(
            sp.Land = s.Mannschaft2 AND t.Spielsituation != 'own goal' 
            OR sp.Land = s.Mannschaft1 AND t.Spielsituation = 'own goal'
         ) AS tore2
         FROM Spiele s
         INNER JOIN Tore t ON s.SpielID = t.SpielID
         INNER JOIN Spieler sp ON t.SpielerNr = sp.SpielerNr 
         GROUP BY s.SpielID
      LG

      Kommentar


      • #4
        OffTopic:

        Du hörst aber nicht grad zufällig DBS in Osnabrück, oder?

        Kommentar


        • #5
          Zitat von krel Beitrag anzeigen
          OffTopic:

          Du hörst aber nicht grad zufällig DBS in Osnabrück, oder?

          Doch, anscheinend.
          Von Studenten sollte man doch wohl erwarten können, dass sie ihre Übungen selbst lösen können, vor allem, wenn das auch noch in Gruppen abgegeben wird. So schwer war das ja nu nicht.
          Wer da am Sonntag abend noch schnell eine Lösung aus dem Netz schnorren muss, hat halt den Schein am Ende einfach nicht verdient.

          Kommentar

          Lädt...
          X