Vinzenz Mai: SELECT-Abfrage

Beitrag lesen

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