Stefan E.: Maximum pro Wert in einer Spalte

Hallo,

klingt erstmal ganz einfach und ist es vielleicht auch, also ich habe folgende Tabelle:

name    jahr   fotos
peter   2008   378
peter   2009   123
peter   2010   253
paul    2008   411
paul    2009    91
paul    2010   500
marie   2008    23
marie   2009   147
marie   2010   623

Jetzt möchte ich eine möglichst einfache SQL-Abfrage haben, die mir folgendes Ergebnis liefert:

name    jahr
peter   2008
paul    2010
marie   2010

Ist immer das Jahr, wo es die meisten Fotos von dem jeweiligen Nutzer gab.

SELECT DISTINCT name, (SELECT jahr FROM table b WHERE b.name = a.name ORDER BY fotos DESC LIMIT 1) jahr FROM table a; könnte es ja sein, wobei ich das jetzt nicht ausprobiert habe und mit dem Subselect finde ich nicht so ideal, zumal es später auf einem Datenbanksystem (Informix V10) laufen muß, was ich hier nicht testen kann und es wirklich sehr viele Datensätze sind.

Hat da jemand noch eine andere Lösung, die möglichst einfach ist?

Danke + MfG, Stefan E.

  1. Hello,

    klingt erstmal ganz einfach und ist es vielleicht auch, also ich habe folgende Tabelle:

    name    jahr   fotos
    peter   2008   378
    peter   2009   123
    peter   2010   253
    paul    2008   411
    paul    2009    91
    paul    2010   500
    marie   2008    23
    marie   2009   147
    marie   2010   623

    Jetzt möchte ich eine möglichst einfache SQL-Abfrage haben, die mir folgendes Ergebnis liefert:

    name    jahr
    peter   2008
    paul    2010
    marie   2010

    Ist immer das Jahr, wo es die meisten Fotos von dem jeweiligen Nutzer gab.

    Du willst gruppieren über den Namen und suchst Nur das Maximum der Gruppe

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo Tom,

      Du willst gruppieren über den Namen und suchst Nur das Maximum der Gruppe

      hm ... also klingt ja soweit logisch, folgendes SQL bringt mich nicht weiter:

      SELECT name, jahr, MAX(fotos) FROM table GROUP BY 1,2;
      (Da bekomme ich alle Namen und alle Jahre).

      Eigentlich bräuchte ich eins, wo mir der Name (und meinetwegen die Anzahl der Fotos, obwohl ich die nicht benötige) zurückgeliefert wird und, was viel wichtiger ist, eben noch das Jahr dazu.

      Kannst Du mir da eine kleines Beispiel geben, weil folgende Schreibweise klappt ja so nicht:

      SELECT name, jahr, MAX(fotos) FROM table GROUP BY 1;

      Danke + MfG, Stefan E.

      1. Hi!

        Eigentlich bräuchte ich eins, wo mir der Name (und meinetwegen die Anzahl der Fotos, obwohl ich die nicht benötige) zurückgeliefert wird und, was viel wichtiger ist, eben noch das Jahr dazu.
        Kannst Du mir da eine kleines Beispiel geben, weil folgende Schreibweise klappt ja so nicht:
        SELECT name, jahr, MAX(fotos) FROM table GROUP BY 1;

        Diese Schreibweise geht zwar in MySQL, aber Informix streikt dann. Mit einer Gruppierung allein ist es (außer bei MySQL) nicht möglich, andere Werte als die der Gruppierbedingungen und Ergebnisse von Aggregatfunktionen zu ermitteln. Ich denke, der Lösungsansatz mit der Subquery führt da schon eher ans Ziel. Subquery kann Informix auch, nur das LIMIT am Statement-Ende versteht es nicht. Das Äquivalent dazu wäre SELECT FIRST anzahl ..., oder LIMIT statt FIRST.

        Lo!

        1. Hallo,

          Diese Schreibweise geht zwar in MySQL, aber Informix streikt dann. Mit einer Gruppierung allein ist es (außer bei MySQL) nicht möglich, andere Werte als die der Gruppierbedingungen und Ergebnisse von Aggregatfunktionen zu ermitteln. Ich denke, der Lösungsansatz mit der Subquery führt da schon eher ans Ziel. Subquery kann Informix auch, nur das LIMIT am Statement-Ende versteht es nicht. Das Äquivalent dazu wäre SELECT FIRST anzahl ..., oder LIMIT statt FIRST.

          ok, ist auch eine Antwort, die mir zumindest das Weitersuchen erspart. Dann teste ich morgen mal, vielleicht geht es ja doch in einer akzetablen Zeit, sind nur einige tausend Datensätze in der (temporären) Tabelle, da sollte es ja vielleicht noch vertretbar sein. Ansonsten melde ich mich wieder.

          Danke + Schönen Abend, Stefan E.

  2. moin,

    Ist immer das Jahr, wo es die meisten Fotos von dem jeweiligen Nutzer gab.

    was willst du den anzeigen, wenn zwei jahren von einem namen die gleiche anzahl haben ?

    Ilja

    1. Hallo,

      Ist immer das Jahr, wo es die meisten Fotos von dem jeweiligen Nutzer gab.

      was willst du den anzeigen, wenn zwei jahren von einem namen die gleiche anzahl haben ?

      meinetwegen das kleinere Jahr, ist nicht ganz so wichtig und auch relativ unwahrscheinlich, da die Foto-Sache nur ein Beispiel ist um hier nicht die eigentlichen Daten erst erklären zu müssen. Aber richtig, auch da könnte es diesen Fall geben, der muß allerdings nicht abgesichert sein.

      MfG, Stefan E.