2016-08-09 3 views
0

Kürzlich wurde ich eine Frage unter SQL-Abfrage gefragt? Kann mir jemand dabei helfen? Ich habe einen Tisch mit drei Spalten - Home Team, Away Team und Winner Team. Wie unten angegeben.SQL-Abfrage, um einen Bericht der gespielten Matches zu erstellen

H_T A_T W_T 
AUS IND IND 
ENG AUS ENG 
IND AUS AUS 
AUS ENG AUS 
ENG IND IND 
IND ENG IND 

Above Daten müssen in SQL konvertiert werden, um den Bericht zu zeigen, mit folgenden Attributen Team Name, Spiele gesamt gespielt, Win Count, Zeichnen Graf, Verlust Graf Punkte.

Punkte berechnet werden, das sind die Formeln für jede Art (win/draw/Verlust)

Win = Win Count * 3

Draw = Unentschieden Count * 1

Loss = Loss Count * 0

Der Punkt wird mit den obigen drei Werten summiert.

Vielen Dank im Voraus

+0

Was ein Unentschieden bestimmt? Und welche Datenbank benutzen Sie? – sgeddes

+1

Fügen Sie das erwartete Ergebnis hinzu. Und zeigen Sie uns Ihren aktuellen Abfrageversuch. – jarlh

+0

Sie können es mit Gruppieren nach und aggregieren Funktionen wie Summe. Auch welchen DB Provider verwendest du? – Doruk

Antwort

2

ein wenig mehr Informationen benötigen, was definiert eine draw, dies übernimmt die w_t Spalte den Wert draw statt eines Teams enthält.

In beiden Fällen können Sie conditional aggregation verwenden, um Ihre gewünschten Ergebnisse zu erhalten. Normalerweise würde man einen teams Tisch und join es, aber Sie können das schaffen mit einem union und einer Unterabfrage:

select t.*, 
    (win_count * 3) + (draw_count) as Points 
from (
    select t.team, 
    count(*) Total_Matches_Played, 
    count(case when t.team = y.w_t then 1 end) Win_Count, 
    count(case when t.team <> y.w_t then 1 end) Loss_Count, 
    count(case when y.w_t = 'DRAW' then 1 end) Draw_Count 
    from (
    select h_t as team from yourtable 
    union select a_t from yourtable 
    ) t join yourtable y on t.team in (y.a_t,y.h_t) 
    group by t.team 
) t 
+0

Nur eine Anmerkung, ANSI SQL erfordert 't. *' Anstelle von '*' in der Auswahlliste. ('*' muss ganz allein sein.) – jarlh

+0

@jarlh - guter Punkt, 'mysql' und' sql server' sind fehlerverzeihender als andere ... – sgeddes

Verwandte Themen