Maximum pro Wert in einer Spalte
Stefan E.
- datenbank
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.
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 623Jetzt möchte ich eine möglichst einfache SQL-Abfrage haben, die mir folgendes Ergebnis liefert:
name jahr
peter 2008
paul 2010
marie 2010Ist 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
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.
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!
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.
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
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.