SELECT-Abfrage
    
no4
    
    
      
    
  - datenbank
- 0 Ilja
- 1 Vinzenz Mai- 0 no4
 
 nicht angemeldet
 nicht angemeldetHallo zusammen!
Ich habe folgende Tabelle mit den Spalten id,team1,team2,tore1,tore2
Mit
SELECT team1,sum(if (tore1>tore2,3,if (tore1=tore2,1,0))) FROM spiele GROUP BY team1
erhalte ich alle Punkte, die ein Team bei Spielen erreicht hat, bei denen das Team an erster Stelle steht.
Analog geht das auch, wenn das Team an zweiter Stelle steht:
SELECT team2,sum(if (tore2>tore1,3,if (tore2=tore1,1,0))) FROM spiele GROUP BY team2
Klar, kann man jetzt die Ergebnisse der Abfragen einfach zusammenzählen.
Aber reicht auch eine Abfrage? Und wenn ja, wie müsste die aussehen?
Viele Grüße
no4
moin,
Aber reicht auch eine Abfrage? Und wenn ja, wie müsste die aussehen?
klar kann man das, aber was wilst du machen, eine Tabelle aufbauen?
Ilja
Wir haben seit längerem ein Tippspiel laufen.
Und da wird u. a. die Tabelle angezeigt. Da ich hier sowieso auch Heim- und Auswärtstabelle angezeigt habe, habe ich die Gesamttabelle aus den beiden berechnet.
Aber jetzt so kurz vor der WM bin ich auf die Ewige Tabelle gestoßen.
Und bei einem WM-Spiel ist es ja bedeutungslos, wer zuerst genannt wird.
Ich hab hier also kein Heim- und Auswärtstabelle, sondern zwei Tabellen aus willkürlich ausgwählten Spielen.
Im Prinzip gehts mir darum, mehr von MySQL zu verstehen.
Grüße no4
moin,
Im Prinzip gehts mir darum, mehr von MySQL zu verstehen.
suche mal im archiv, ich hatte in mysql schon mal eine abfrage gemacht, wie sich eine komplette tabelle berechnen läßt.
Ilja
Hallo,
SELECT team1,sum(if (tore1>tore2,3,if (tore1=tore2,1,0))) FROM spiele GROUP BY team1
Analog geht das auch, wenn das Team an zweiter Stelle steht:
SELECT team2,sum(if (tore2>tore1,3,if (tore2=tore1,1,0))) FROM spiele GROUP BY team2
Aber reicht auch eine Abfrage? Und wenn ja, wie müsste die aussehen?
1. UNION ALL der beiden Abfragen
-- Punkte aus den Heimspielen  
SELECT  
    team1 team,  
    SUM(IF(tore1 > tore2, 3, IF(tore1 = tore2), 1, 0))) punkte  
FROM  
    spiele  
GROUP BY  
    team1  
UNION ALL  
-- Punkte aus den Auswärtsspielen  
SELECT                -- hier sind keine Spaltenaliasnamen mehr zulässig  
    team2,  
    SUM(IF(tore2 > tore1, 3, IF(tore2 = tore1), 1, 0)))  
FROM  
    spiele  
GROUP BY  
    team2
2. summiere die Punktespalte (der Du einen hübschen Spaltennamen verpasst hast) und gruppiere nach der Teamspalte:
SELECT  
    s.team,  
    SUM(s.punkte) gesamtpunkte   -- hier kannst Du den Aliasnamen, den Du  
                                 -- im ersten Teil der UNION festgelegt hast,  
                                 -- verwenden.  
FROM (  
    SELECT  
        team1 team,  
        SUM(IF(tore1 > tore2, 3, IF(tore1 = tore2), 1, 0))) punkte  
    FROM  
        spiele  
    GROUP BY  
        team1  
    UNION ALL  
    SELECT  
        team2,  
        SUM(IF(tore2 > tore1, 3, IF(tore2 = tore1), 1, 0)))  
    FROM  
        spiele  
    GROUP BY  
        team2  
) s    -- der Aliasname für die Unterabfrage ist zwingend erforderlich  
GROUP BY  
    s.team  
ORDER BY               -- Zusatz von mir, hättest Du auch selbst hinbekommen  
    SUM(s.punkte) DESC -- üblicherweise sind Fußballtabellen nach  
                       -- erzielten Punkten absteigend sortiert :-)  
                       -- in MySQL wäre auch ORDER BY gesamtpunkte erlaubt,  
                       -- in Standard-SQL nicht.  
Da solche Tabellen üblicherweise nicht besonders umfangreich sind, machte ich mir über Performance wenig Gedanken :-)
Freundliche Grüße
Vinzenz
Hai!
UNION ALL ist bisher an mir vorbeigegangen.
Werde ich mir mal anschauen.
Danke schon mal
Grüße
Jochen