Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL Unterabfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von MrMahi, 2 Mai 2012.

  1. MrMahi

    MrMahi Benutzer

    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
     
  2. ukulele

    ukulele Datenbank-Guru

    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
     
    MrMahi gefällt das.
  3. MrMahi

    MrMahi Benutzer

    Ahhhh, jetzte weiß ichs. Musste noch ELSE 0 entfernen.

    Super!

    Vielen Dank,
    Jens
     
  4. ukulele

    ukulele Datenbank-Guru

    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.
     
    PLSQL_SQL gefällt das.
  5. MrMahi

    MrMahi Benutzer

    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.
     
  6. ukulele

    ukulele Datenbank-Guru

    Ja stimmt auch wieder, bei sum wäre 0 ok, bei avg verfälscht es das Ergebniss.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden