Ik ben bezig om een query te maken die wedstrijdresultaten uit een tabel omzet naar een stand. Dit gaat best wel makkelijk, maar ik zit toch met een vraag.
Dit is de query die ik op dit moment heb.
Wat hier wordt berekend is het aantal gespeelde wedstrijden en het aantal wedstrijden dat is gewonnen, gelijk gespeeld en verloren.
Nu komt het aantal punten. Dat is te berekenen door 'gw' *3 te doen en dan 'gl' erbij op te tellen.
Het lukt maar niet om die 2 resultaten (gw en gl) uit de query te gebruiken voor het berekenen van het aantal punten. Ik kan die 2 queries wel nog een keer uitvoeren en dan met een + teken aan elkaar plakken, maar dat is niet goed voor de performance.
Dan bedoel ik dit:
((query-gw)*3)+query-gl AS pnt
Daarbij worden 2 keer dezelfde gegevens opgehaald en dat lijkt me overbodig.
Ik heb met Google gezocht naar dingen als 'use subselect results in the same query', maar dat heeft niks opgeleverd.
De database server draait op PostgreSQL 7.4
Dit is de query die ik op dit moment heb.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| SELECT team_naam ,(
SELECT count(w.id)
FROM wedstrijden_new w INNER JOIN schema14 s ON w.schema_wed_id = s.id
WHERE (s.thuis_wed = t.team_id OR s.uit_wed = t.team_id)
AND w.thuis_uitslag IS NOT NULL AND w.uit_uitslag IS NOT NULL
AND w.seizoen_id = 3 AND w.klasse_id = 1 )
AS wd, (
SELECT count(w.id)
FROM wedstrijden_new w INNER JOIN schema14 s ON w.schema_wed_id = s.id
WHERE w.thuis_uitslag IS NOT NULL
AND (s.thuis_wed = t.team_id AND w.thuis_uitslag > w.uit_uitslag
OR s.uit_wed = t.team_id AND w.thuis_uitslag < w.uit_uitslag )
AND w.seizoen_id = 3 AND w.klasse_id = 1 )
AS gw, (
SELECT count(w.id)
FROM wedstrijden_new w INNER JOIN schema14 s ON w.schema_wed_id = s.id
WHERE w.thuis_uitslag IS NOT NULL
AND (s.thuis_wed = t.team_id AND w.thuis_uitslag = w.uit_uitslag
OR s.uit_wed = t.team_id AND w.thuis_uitslag = w.uit_uitslag )
AND w.seizoen_id = 3 AND w.klasse_id = 1 )
AS gl, (
SELECT count(w.id)
FROM wedstrijden_new w INNER JOIN schema14 s ON w.schema_wed_id = s.id
WHERE w.thuis_uitslag IS NOT NULL
AND (s.thuis_wed = t.team_id AND w.thuis_uitslag < w.uit_uitslag
OR s.uit_wed = t.team_id AND w.thuis_uitslag > w.uit_uitslag )
AND w.seizoen_id = 3 AND w.klasse_id = 1 )
AS vl
FROM teams t WHERE seizoen_id = 3 AND klasse_id = 1 |
Wat hier wordt berekend is het aantal gespeelde wedstrijden en het aantal wedstrijden dat is gewonnen, gelijk gespeeld en verloren.
Nu komt het aantal punten. Dat is te berekenen door 'gw' *3 te doen en dan 'gl' erbij op te tellen.
Het lukt maar niet om die 2 resultaten (gw en gl) uit de query te gebruiken voor het berekenen van het aantal punten. Ik kan die 2 queries wel nog een keer uitvoeren en dan met een + teken aan elkaar plakken, maar dat is niet goed voor de performance.
Dan bedoel ik dit:
((query-gw)*3)+query-gl AS pnt
Daarbij worden 2 keer dezelfde gegevens opgehaald en dat lijkt me overbodig.
Ik heb met Google gezocht naar dingen als 'use subselect results in the same query', maar dat heeft niks opgeleverd.
De database server draait op PostgreSQL 7.4