Jag har den här sql-frågan för att räkna ut en hockeytabell
SELECT s_deltagande_lag.ID, s_deltagande_lag.Namn,s_deltagande_lag.serie_id,
@games := Count(s_matcher.ID) AS games,
@win := Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)) AS win,
@tie := Sum(resultat_a=resultat_b) AS tie,
@lost := ((Count(s_matcher.ID))-(Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)))-(Sum(resultat_a=resultat_b))) as lost,
@poang:= ((Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b))*2) + (Sum(resultat_a=resultat_b))) AS poang,
@plus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) as plus,
@minus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) as minus,
@plusminus := Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) - Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) as plusminus
FROM s_deltagande_lag LEFT JOIN s_matcher ON s_deltagande_lag.ID=s_matcher.lagid_a Or s_deltagande_lag.ID=s_matcher.lagid_b
where s_deltagande_lag.serie_ID = 42 and s_matcher.uppdaterad = 1
GROUP BY ID, Namn ORDER BY 8 DESC, 11 DESC, 9 DESC, 10 ASC
Den fungerar bra när det är matcher spelade men när det inte är några matcher spelade skrivs inga lag ut.
S_matcher.uppdaterad är 1 när matchen är spelad.
Kan jag skriva ut lagen även om inga matcher är spelade med den här frågan eller ska jag köra 2 olika frågor?
SELECT s_deltagande_lag.ID, s_deltagande_lag.Namn,s_deltagande_lag.serie_id,
@games := Count(s_matcher.ID) AS games,
@win := case when s_matcher.uppdaterad = 1 then Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)) else 0 end AS win,
@tie := case when s_matcher.uppdaterad = 1 then Sum(resultat_a=resultat_b) else 0 end AS tie,
@lost := case when s_matcher.uppdaterad = 1 then ((Count(s_matcher.ID))-(Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b)))-(Sum(resultat_a=resultat_b))) else 0 end as lost,
@poang:= case when s_matcher.uppdaterad = 1 then ((Sum((s_deltagande_lag.ID=lagid_a And resultat_a > resultat_b )Or (s_deltagande_lag.ID=lagid_b And resultat_a<resultat_b))*2) + (Sum(resultat_a=resultat_b))) else 0 end AS poang,
@plus := case when s_matcher.uppdaterad = 1 then Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) else 0 end as plus,
@minus := case when s_matcher.uppdaterad = 1 then Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) else 0 end as minus,
@plusminus := case when s_matcher.uppdaterad = 1 then Sum((s_deltagande_lag.ID=lagid_a)*resultat_a + (s_deltagande_lag.ID=lagid_b)*resultat_b) - Sum((s_deltagande_lag.ID=lagid_a)*resultat_b + (s_deltagande_lag.ID=lagid_b)*resultat_a) else 0 end as plusminus
FROM s_deltagande_lag LEFT JOIN s_matcher ON s_deltagande_lag.ID=s_matcher.lagid_a Or s_deltagande_lag.ID=s_matcher.lagid_b
where s_deltagande_lag.serie_ID = 2
GROUP BY ID, Namn ORDER BY 8 DESC, 11 DESC, 9 DESC, 10 ASC
Nytt problem. När inga matcher är spelade skrivs lagnamnet ut och games, win, tie... blir 0. Men när en match är spelad räknas tabellen ut på alla matcher i serien även dom som inte är spelade så resultatet kan bli