webForumDet fria alternativet

Räkna ut tabell

5 svar · 350 visningar · startad av andreas_lindh

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#1

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?

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#2

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
andreas_lindhMedlem sedan jan. 20011 140 inlägg
#3

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
#4

Hur vet att en match är spelad?

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#5

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
#6

Efter som du kräver att den ska vara 1 i din where-klausul måste det vara något annat fel... ? :q

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)