GROUP BY fehlende sortierung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • GROUP BY fehlende sortierung

    Hallo,

    habe ein kleines Problem und stehe gerade auf dem Schlauch.

    Ich habe folgende Tabelle in gekürzter Form:

    id | value | user | cat
    1 | 100 | 1 | 1
    2 | 50 | 2 | 2
    3 | 60 | 3 | 3
    4 | 150 | 4 | 1

    jetzt möchte ich die ausgabe gruppieren nach "cat" und jeweils die zeile mit dem höchsten "value" haben.

    ich habe bisher zwei abfragen probiert:
    1.
    PHP-Code:
    SELECT
    value
    ,user,cat
    FROM
    table
    GROUP BY
    cat
    HAVING
    value 
    MAX(value
    Hier ist das Problem, dass jetzt zB der Eintrag für "cat 1" kopmplett rausfällt, weil er zeile 1 auswählt, dort "value" aber nicht = MAX(value) ist, weil zeile 1 100 ist und MAX = 150.

    2.
    PHP-Code:
    SELECT
    max
    (value),user,cat
    FROM
    table
    GROUP BY
    cat 
    hier ist jetzt das problem, dass zwar alle max values angezeigt werden, aber nicht immer der richtige user, sonder für den max value = 150 wird jetzt user 1 ausgegeben.

    Kann mir da bitte jemand helfen. Komme gerade nicht weiter, obwohl die Lösung eigentlich easy sein müsste.

    danke.
    Zuletzt geändert von Beeper; 15.03.2005, 09:45.

  • #2
    du mußt ein self join (Join mit sich selbst) durchführen, mehr dazu: http://www.php-resource.de/forum/sho...threadid=28292

    Kommentar


    • #3
      auf der seite stehen zwar viele hinweise zu joins, aber ich weiss jetzt trotzdem nicht genau, wie ich denn mit einem self join etwas anderes rausbekomme als vorher.

      ich habe den self join eingebaut und dann wählt er ja die selben daten nochmal aus. wenn ich nun wieder die gruppierung mache, dann habe ich aber wieder die selben fehler wie oben gemacht.

      welcher von beiden ansätzen oben ist denn korrekt? oder muß ich das komplett anders schreiben, wenn ich einen self join verwende.

      Kommentar


      • #4
        probiere mal

        Code:
        select 
           a.user, a.cat, max(a.`value`) mvalue 
        from `table` a left join `table` b 
           on a.cat=b.cat and a.id<b.id
        where 
           b.id is null

        Kommentar


        • #5
          Das ist halt der Mist wenn man 'ne Datenbank verwendet die fast alles toleriert ... und selbst keine ausreichende Disziplin besitzt valides ANSI-SQL zu verwenden ... dabei kann nur Schrott herauskommen ...

          Wenn ich so einen Scheiss schon sehe ... Aggregieren ... und das Ergebnis einer Aggregatfunktion auf ein x-beliebiges sonstiges Attribut anwenden ... da kann nur Scheisse bei rauskommen ... auch wenn MySQL es akzeptiert ... (glücklicherweise gibt's auch dort mittlerweile 'nen ANSI-Mode) ...
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #6
            ok, vielen dank, habe es hinbekommen. der code sieht jetzt folgendermaßen aus:

            PHP-Code:
            select 
               a
            .usera.cata.value 
            from 
            `tablea left join `table
               on a
            .cat=b.cat and a.value<b.value
            where 
               b
            .id is null 
            musste nur noch value und id tauschen bei dem join. und max() ging ja gar, weil keine group by klausel vorhanden ist.

            danke nochmal

            Kommentar


            • #7
              hehe das max ist mir irgendwie darein gerutscht , eigentlich wollte ich wie du's geschrieben hast posten

              @goth, schlecht geschlafen?

              Kommentar

              Lädt...
              X