webForumDet fria alternativet

Få fram periodresultat

Databaser & SQL

5 svar · 243 visningar · startad av Obbelix

Medlem sedan okt. 2002257 inlägg
Frågan#1

Nu är jag här igen med mina "sql-problem" :)

Säg att tabellen ser ut så här:

period | time_min | time_sec | action_type | team_id | home_goals | away_goals
1        10         12         goal          55        1            0
1        11         22         goal          55        2            0
2        05         48         goal          58        2            1
2        06         10         goal          55        3            1
2        15         22         goal          58        3            2
3        16         55         goal          55        4            2

Går det utifrån detta att få fram följande resultat

period | team1 | team2
1        2       0
2        1       2
3        1       0

Jag skulle ju kunna göra en fråga per lag men undrar alltså om det går att lösa i en å samma.

Medlem sedan dec. 200012 464 inlägg
#2
select period, 
max(home_goals) - min(home_goals) -
case when min(home_goals) > 0 then 1 else 0 end,
max(away_goals) - case wmin(away_goals) -
case when min(away_goals) > 0 then 1 else 0 end
from t
group by period
Medlem sedan okt. 2002257 inlägg
#3

Tackar. Men jag misstänker att det ska vara "+" istället för "-" innan case och att det ska vara "min" istället för "case wmin" , eller? ;)

Har testat denna och den verkar så långt funka som den ska

select period, 
max(home_goals) - min(home_goals) +
case when min(home_goals) > 0 then 1 else 0 end,
max(away_goals) - min(away_goals) +
case when min(away_goals) > 0 then 1 else 0 end
from t
group by period
Medlem sedan okt. 2002257 inlägg
#4

Har nu hunnit testa lite mer, och den räknar lite fel...
Har denna SQL-fråga:

select period,
max(home_goals) - min(home_goals) + 
case when min(home_goals) >0 then 1 else 0 end AS t1goal,
max(away_goals) - min(away_goals) +
case when min(away_goals) >0 then 1 else 0 end AS t2goal 
from game_data where game_id=53 
group by period

Och kör den på denna tabell:

period | time_min | time_sec | action_type | team_id | home_goals | away_goals
1        07         08         goal          55        0            1
2        04         13         goal          58        1            1
2        10         09         goal          55        1            2
2        12         17         goal          55        1            3
3        06         10         goal          58        2            3

Och får ut detta resultatet:

period | t1goal | t2goal
1        0        1
2        1        3
3        1        1

Men vill få ut detta:

period | t1goal | t2goal
1        0        1
2        1        2
3        1        0

Vad gör jag för fel?

/red: stavfel i kolumnnamn

Medlem sedan dec. 200012 464 inlägg
#5
select period,
max(coalesce(home_goals,0)) -
(select max(coalesce(home_goals,0))
   from game_data
  where game_id = 53
    and period < gd.period) as t1goal,
max(coalesce(away_goals,0)) -
(select max(coalesce(away_goals,0))
   from game_data
  where game_id = 53
    and period < gd.period) as t2goal
from game_data gd 
where game_id=53 
group by period

Du får problem med de perioder där det blir 0-0.

Medlem sedan okt. 2002257 inlägg
#6

nja. den blev inte rätt heller, men ledde mig till rätt svar (tror jag i alla fall).
Gjorde såhär:

select period,
(select count(*) 
  from game_data 
  where action_type='goal' 
  and game_id=53 
  and period=gd.period 
  and team_id=22) as t1goal,
(select count(*) 
  from game_data 
  where action_type='goal' 
  and game_id=53 
  and period=gd.period 
  and team_id=21) as t2goal
from game_data gd 
where game_id=53 
group by period

För jag vet ju vilka lag som spelar och vet också vilka poster som är "mål".

257 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)