SQL Unterabfrage

MrMahi

Benutzer
Beiträge
22
Hallo,

ich habe folgendes Problem.
Zum erstellen einer kleinen Spielstände-Datenbank möchte ich Ergebnisse ausgeben lassen.
Das Funktioniert auch so weit.

Code:
SELECT pl_name, COUNT(scores.pl_id) AS anzahlspiele, AVG(score) AS schnitt, MIN(score) AS bestes, AVG(score) AS schnittch
FROM
players, scores, games
WHERE games.ga_id=scores.ga_id
AND players.pl_id=scores.pl_id
GROUP BY players.pl_id

Ich lass mir die Namen, die Anzahl der Spiele , den Durschnittswert der Schäge, das Beste Ergebniss ausgeben. Alles wunderbar. Jetzt möchte ich aber auch noch an letzter Stelle die

AVG(score) AS schnitt-championchip

ausgeben lassen die noch eine besonderheit hat. Und zwar
games.ga_championchip = 1
Also nur die Spiele Bewerten die ein "Championchip-Spiel" sind.
Das haut aber nicht hin.
Kann mir jemand helfen?

Danke schön,
Jens
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.416
Da kämen mir zwei Möglichkeiten in den Sinn. Entweder die Tabelle scroes ein weiteres mal in den SELECT einbeziehien oder mit einer CASE Schleife. Ich probiers mal:
Code:
SELECT    pl_name,
        COUNT(scores.pl_id) AS anzahlspiele,
        AVG(score) AS schnitt,
        MIN(score) AS bestes,
        AVG(    CASE
            WHEN    games.ga_championchip = 1
            THEN    score
            ELSE    0
            END ) AS schnittch
FROM    players,
        scores s1,
        games
WHERE    games.ga_id = s1.ga_id
AND        players.pl_id = s1.pl_id
GROUP BY players.pl_id
 

ukulele

Datenbank-Guru
Beiträge
4.416
Mehrere scores Tabellen joinen kann etwas verwirrend werden, da versuch ich lieber das oben zu debuggen :) Kannst du mir sagen wann es abweicht? Und hast du die Abfragen exakt formuliert?

Code:
SELECT    pl_name,
        --COUNT(scores.pl_id) AS anzahlspiele,
        --AVG(score) AS schnitt,
        --MIN(score) AS bestes,
        (    CASE
            WHEN    games.ga_championchip = 1
            THEN    scores.score
            ELSE    0
            END ) AS schnittch,
        games.ga_championchip
FROM    players,
        scores,
        games
WHERE    games.ga_id = scores.ga_id
AND        players.pl_id = scores.pl_id
--GROUP BY players.pl_id

In dieser Tabelle müsste man relativ schnell sehen, wo ga_championchip = 1 ist aber kein Wert angezeigt wird.
 

MrMahi

Benutzer
Beiträge
22
Ich denke wenn ich stat nichts eine 0 nehme und dann Teile habe ich ja einen größeren Teiler, da ja auch 0er dabei sind.
Oder sehe ich das Falsch.
Dein Code oben hat jetzt 0 als Ergebnis rausgeworfen.

Aber ich bin happy,
1000 Dank.
 
Werbung:
Oben