MySQL Suche nach Max Value in einer Tabelle

Diskutiere Suche nach Max Value in einer Tabelle im Datenbankprogrammierung Forum; Hallo zusammen, die Überschrift ist etwas simpler als es mein Problem darstellt. ID-----playerID-----nationID-----victories 1 1...

  1. Hades85
    Hades85 Mitglied
    Hallo zusammen,
    die Überschrift ist etwas simpler als es mein Problem darstellt.

    Code (Text):
    ID-----playerID-----nationID-----victories
    1           1            1            4
    2           1            2            0
    3           1            3            2
    4           2            1            1
    5           2            2            7
    6           2            3            0
     
    Code (Text):
    SELECT *, MAX(`victories`) as `testMax` FROM `nation_stats` GROUP BY `nationID` ORDER BY MAX(`victories`) DESC
    Wenn ich das richtig sehe gibt mir diese Abfrage zwar die max werte für jede nationID korrekt heraus aber ich kann leider nicht einsehen welche playerID dahinter steckt, zurzeit zeigt er mir bei genau dieser abfrage nur playerID 1 an.

    Ziel ist es aber zu ermitteln welcher player bei jeder nationID den höchsten victory wert besitzt.
     
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. stg
    stg Bekanntes Mitglied
    Zuerst, wie du es auch schon gemacht hast, fragst du die maximale Anzahl der Siege je Nation ab (mit Max und Group By). Danach joinst du das Ergebnis nocheinmal auf die ursprüngliche Tabelle, um die fehlendenen Werte zu erhalten.
     
    Hades85 gefällt das.
  4. fhoffmann
    fhoffmann Mitglied
    Code (Text):
    select * from nation_stats where victories =
    (select max(victories) from nations_stats)
     
    Hades85 gefällt das.
  5. Dukel
    Dukel Aktives Mitglied
    Meines Wissens musst du alle Felder gruppieren, die du im Select abfrägst.
    Geht evtl. folgendes?
    Code (Text):
    SELECT ID, MAX(`victories`) as `testMax` FROM `nation_stats` GROUP BY `nationID`,`ID` ORDER BY MAX(`victories`) DESC
    Ein Select * ist generell schlecht.
     
  6. stg
    stg Bekanntes Mitglied
    Das liefert nicht das gewünschte Ergebnis.

    Nein. Eine Gruppierung nach ID macht die Abfrage recht sinnlos.

    Was zu tun ist habe ich ja im ersten Post schon geschrieben. Lasst den TE doch erstmal antworten :)
     
  7. Hades85
    Hades85 Mitglied
    Code (Text):
    select * from nation_stats where victories =
    (select max(victories) from nations_stats)
    Der spuckt mir leider nur das Ergebnis der jenigen SpielerID mit dem höchsten Wert, in meinem Fall waren dass zwei SpielerIDs mit den selben victory Werten.

    Den Versuch nach dem Result ein Join hinzubekommen, scheiterte leider kläglich.

    Muss ich vor dem Join die selbe Tabelle mit sich selber joinen. Also mit dem Muster
    Code (Text):
    SELECT
        c1.city, c1.customerName, c2.customerName
    FROM
        customers c1
            INNER JOIN
        customers c2 ON c1.city = c2.city
            AND c1.customername <> c2.customerName
    ORDER BY c1.city;
    Ich muss leider zugeben, dass meine Kentnisse in SQL sehr rudimentär aufgestellt sind.
     
  8. stg
    stg Bekanntes Mitglied
    Dann nochmal ausführlich:

    Zuerst fragst du die maximale Anzahl an Siegen je Nation ab:
    Code (Text):
    select NATIONID, MAX(VICTORIES) FROM NATION_STATS GROUP BY NATIONID
    Als Resultat erhälst du
    Code (Text):

      NATIONID MAX(VICTORIES)
    ---------- --------------
             1              4
             2              7
             3              2
     
    Dann der JOIN auf die ursprüngliche Tabelle, um auch die fehlenden Informationen zu erhalten:
    Code (Text):

    SELECT a.NATIONID, a.VICTORIES, b.PLAYERID, b.ID
    FROM (
        SELECT NATIONID, MAX(VICTORIES) AS VICTORIES FROM NATION_STATS GROUP BY NATIONID
    ) a
    INNER JOIN NATION_STATS b
    ON a.NATIONID = b.NATIONID AND a.VICTORIES = b.VICTORIES
     
    Dann bekommst du:
    Code (Text):

      NATIONID  VICTORIES   PLAYERID         ID
    ---------- ---------- ---------- ----------
             1          4          1          1
             3          2          1          3
             2          7          2          5
     
     
    Hades85 gefällt das.
  9. Hades85
    Hades85 Mitglied
    Vielen Dank für deine Mühen! Hat funktioniert, habe jetzt weitere joins vorgenommen um die Namen der nationIDs und playerIDs hinzuzufügen.

    Andere Frage, könnte man noch erzwingen maximal nur einen Eintrag pro nationID zu zeigen, der den höchsten Wert besitzt? Zur Zeit könnte pro nationID auch mehrere playerID angezeigt werden, sollten die playerIDs ebenso viele victories haben.
     
Die Seite wird geladen...

Suche nach Max Value in einer Tabelle - Ähnliche Themen

Alle Objekte einer Klasse nach Eigenschaft durchsuchen
Alle Objekte einer Klasse nach Eigenschaft durchsuchen im Forum Java Basics - Anfänger-Themen
Suchen nach einer bestimmten Eingabe (durch Scanner)
Suchen nach einer bestimmten Eingabe (durch Scanner) im Forum Java Basics - Anfänger-Themen
Suche Nachhilfelehrer
Suche Nachhilfelehrer im Forum Private Stellangebote und Stellensuche von Usern
Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen
Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen im Forum AWT, Swing, JavaFX & SWT
Array nach Zehnen durchsuchen.
Array nach Zehnen durchsuchen. im Forum Java Basics - Anfänger-Themen
Thema: Suche nach Max Value in einer Tabelle