[MySQL] Twee waardes van elkaar aftrekken

Pagina: 1
Acties:
  • 209 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024
Ik ben bezig om honkbal standen te maken. Ik probeer zo weinig mogelijk queries te maken. Ik heb nu het volgende:

PHP:
1
2
3
4
5
SELECT team.name, SUM( home_game.home_score ) + SUM( away_game.away_score ) AS runs_scored, SUM( home_game.away_score ) + SUM( away_game.home_score ) AS runs_lost
FROM `team`
LEFT JOIN game AS home_game ON ( home_game.home_team = team.id )
LEFT JOIN game AS away_game ON ( away_game.away_team = team.id )
GROUP BY team.id


Ik zit eigenlijk met twee dingen. Als een team alleen een thuis wedstrijd gespeeld heeft krijg ik bij dat team NULL terug. Opzich logisch maar ik weet niet hoe ik het oplos.

Is het ook mogelijk om runs_score van runs_lost af te trekken zodat ik een runs saldo krijg.

Acties:
  • 0 Henk 'm!

  • Jurgle
  • Registratie: Februari 2003
  • Laatst online: 02-06 10:40

Jurgle

100% Compatible

Volgens mij kun je die waardes van elkaar aftrekken door een subselect, weet alleen niet of dat de nette methode is:

code:
1
2
3
4
5
6
SELECT      TMP.name,
                  TMP.runs_score, 
                   TMP.runs_lost,
                   TMP.runs_score - TMP.runs_lost AS runs_saldo
FROM         ([JOUW_QUERY]) TMP
GROUP BY   TMP.id


Voor het NULL probleem: volgens mij zijn er if statements die checken op NULL in SQL beschikbaar, ff de manual er op naslaan dus.

[ Voor 10% gewijzigd door Jurgle op 22-02-2006 22:44 . Reden: Code multiline leesbaar gemaakt ]

My opinions may have changed but not the fact that I am right ― Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

Anoniem: 25556

Jurgle schreef op woensdag 22 februari 2006 @ 22:43:
Voor het NULL probleem: volgens mij zijn er if statements die checken op NULL in SQL beschikbaar, ff de manual er op naslaan dus.
Je kunt het ook sneller oplossen met een Coalesce, dus
SQL:
1
coalesce(veld, 0)


coalesce geeft de eerste niet-null waarde terug, in dit geval dus 0.

Nog beter is natuurlijk gewoon 0 er in zetten als standaard waarde, dus het veld niet NULL laten zijn..

[ Voor 12% gewijzigd door Anoniem: 25556 op 22-02-2006 23:08 ]


Acties:
  • 0 Henk 'm!

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024
Anoniem: 25556 schreef op woensdag 22 februari 2006 @ 23:07:
[...]


Je kunt het ook sneller oplossen met een Coalesce, dus
SQL:
1
coalesce(veld, 0)


coalesce geeft de eerste niet-null waarde terug, in dit geval dus 0.

Nog beter is natuurlijk gewoon 0 er in zetten als standaard waarde, dus het veld niet NULL laten zijn..
Nu zet hij NULL om naar 0. Maar dat is niet de bedoeling.

Je hebt zeg maar een uit en een thuis team. De runs worden ook opgeslagen als away_runs en home_runs.

Ik krijg die null waarde als er bijvoorbeeld alleen een thuiswedstrijd is gespeeld. Terwijl er dan wel een wedstrijd gespeeld is.

Acties:
  • 0 Henk 'm!

Anoniem: 25556

Door de NULL waardes door 0 te vervangen, klopt je optelsom weer. Je krijt NULL terug omdat die als waarde in je som voorkomt.

  • Thomasje
  • Registratie: Augustus 2002
  • Laatst online: 29-05-2024
Anoniem: 25556 schreef op woensdag 22 februari 2006 @ 23:20:
Door de NULL waardes door 0 te vervangen, klopt je optelsom weer. Je krijt NULL terug omdat die als waarde in je som voorkomt.
Ik had het op een verkeerde plek gezet. Ik heb voor het saldo geen subselect gebruikt maar heb de SUM nog een keer gedaan.

PHP:
1
2
3
4
5
6
7
8
SELECT team.name, coalesce( SUM( home_game.home_score ) , 0 ) + coalesce( SUM( away_game.away_score ) , 0 ) AS runs_scored, coalesce( SUM( home_game.away_score ) , 0 ) + coalesce( SUM( away_game.home_score ) , 0 ) AS runs_lost, (
coalesce( SUM( home_game.home_score ) , 0 ) + coalesce( SUM( away_game.away_score ) , 0 )
) - ( coalesce( SUM( home_game.away_score ) , 0 ) + coalesce( SUM( away_game.home_score ) , 0 ) ) AS saldo
FROM `team`
LEFT JOIN game AS home_game ON ( home_game.home_team = team.id )
LEFT JOIN game AS away_game ON ( away_game.away_team = team.id )
GROUP BY team.id
LIMIT 0 , 30


Nu moet ik alleen uitzoeken hoe ik punten tellen doe. Dus aantal gewonnen wedstrijden = 2 punten, gelijk is 1 punt.


Zou iemand mij hier bij kunnen helpen?

[ Voor 3% gewijzigd door Thomasje op 23-02-2006 13:25 ]

Pagina: 1