Hilfe zu SELECT Abfrage

Hallo!
Brauch mal wieder einen Denkanstoß.

Gegeben:

 uid | number | text
-----+--------+------
   1 | 2000   | a
   1 | 2000   | b
   1 | 1997   | c
   2 | 2004   | d
   2 | 2003   | e
   2 | 2002   | f
   3 | 2002   | g
   3 | 1999   | h
   3 | 1999   | i

Es soll jetzt in einen view (wiedermal) nur die max und min Zahlen eingetragen werden, der dazugehörige text und das ganze gruppiert nach der uid.
Es sollte so aussehen:

 uid | max  | text | min  | text
-----+------+------+------+----------
   1 | 2000 | a    | 1997 | c
   2 | 2004 | d    | 2002 | f
   3 | 2002 | g    | 1999 | i

Mein Problem ist, dass postgre meint es braucht als ‘GROUP BY’ Parameter auch ‘text’, weil z.B. bei uid 1 zwei max Werte gibt (2000) aber auch zwei unterschiedliche texte (a und b). Wie funktioniert das jetzt, dass wenn es mehrere gleiche max oder min Werte gibt, er dann einen beliebigen Text der bei den Zahlen steht nimmt damit nur nach uid gruppiert wird?
(Siehe uid 3 min Wert 1999 mit Text h und i; er nimmt i, könnte aber auch h nehmen - ist egal, hauptsache der Text gehört zur min bzw max Zahl!)

Danke für Hilfe!
MfG Emanuel



test=*# select * from foo;
 uid | number | t
-----+--------+---
   1 |   2000 | a
   1 |   2000 | b
   1 |   1997 | c
   2 |   2004 | d
   2 |   2003 | e
   2 |   2002 | f
   3 |   2002 | g
   3 |   1999 | h
   3 |   1999 | i
(9 rows)

test=*# select a.*, min(b.t), max(c.t) from (select uid, max(number), min(number) from foo group by 1 order by 1) a left join foo b on (a.uid,a.max)=(b.uid,b.number) left join foo c on (a.uid,a.min)=(c.uid,c.number) group by 1,2,3 order by 1;
 uid | max  | min  | min | max
-----+------+------+-----+-----
   1 | 2000 | 1997 | a   | c
   2 | 2004 | 2002 | d   | f
   3 | 2002 | 1999 | g   | i
(3 rows)

lediglich die Reihenfolge der Spalten ist anders, wäre aber trivial zu ändern.

Mahlzeit, Andreas

Jop, das dürfte es sein danke!

Ich konnte es auf meine Tabelle anpassen - mit Erfolg.
Leider versteh ich noch nicht so gaanz was da genau vorsich geht aber ich werd schon noch dahinter kommen!

Eine Frage hätte ich aber noch bzgl. dem ‘GROUP BY’.
Warum verwendest du beim ‘GROUP BY’ 1,2,3 und nicht spaltennamen? oder zeigen die nummern auf spalten? Normalerweise schreibt man doch z.B.:
GROUP BY a.uid;

Danke für die Hilfe!
MfG Emanuel

Naja, einfach nur joins :wink:

Eine Frage hätte ich aber noch bzgl. dem ‘GROUP BY’.
Warum verwendest du beim ‘GROUP BY’ 1,2,3 und nicht spaltennamen?

Pure Faulheit. In ‘echten’ Abfragen nehme ich dann schon die Spaltennamen.

oder zeigen die nummern auf spalten? Normalerweise schreibt man doch z.B.:
GROUP BY a.uid;

ja, ja

Andreas