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?
Löste det med case when
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
Lag 1 26 matcher 1 seger 25 oavgjorda 0 förluster 27 poäng
Lag 2 26 matcher 0 segrar 25 oavgjorda 1 förlust 25 poäng
Går det att göra så att frågan bara räknar med de spelade matcherna?
LarsGMedlem sedan dec. 200012 464 inlägg Hur vet att en match är spelad?
Jag har ett fält i tabellen s_matcher som heter uppdaterad. När matchen är spelad sätts updpaterad till 1, om matchen inte är spelad är uppdaterad 0
aasahMedlem sedan mars 20034 471 inlägg Efter som du kräver att den ska vara 1 i din where-klausul måste det vara något annat fel... ? :q