Abfrage SQL Verständnisproblem

m0w11

Neuer Benutzer
Beiträge
1
Hallo und schon ein mal vielen Dank für die Hilfe.

Und zwar habe ich eine kleine Frage bzw ein Verständnisproblem.

Ich erstelle mir eine Beispielabfrage.

Code:
SELECT
ID,
Min(Datum) AS Dat,
Geschlecht
FROM
   (
   SELECT
   db.ID,
   db.Datum,
   db.Geschlecht
   FROM db
   )
GROUP BY
ID,
Datum,
Geschlecht

Jetzt möchte ich das Feld "Dat" für andere Abfragen benutzen die per Left Join angefügt werden.
Kann mir da jemand einen kleinen Denkanstoß geben?
 
Werbung:
Das datum im GROUP BY gehört da nicht hin, die Spalte gibts nicht. Wenn Du mit dem Ergebnis Joinen möchtest, packe das SQL einfach nochmal in ein Subselect.
Allerdings kannst du dir dein vorhandenes Subselect sparen:
Code:
SELECT  
 db.ID,
 min(db.Datum),
 db.Geschlecht
FROM db
GROUP BY ID, Geschlecht

Falls ID der Primärschlüssel ist, wird dein Ergebnis evtl. nicht das sein was Du erwartest.
 
Ich gehe davon aus das jede ID nur einmal vorhanden ist, deswegen brauchst du keine gruppe auf die ID bilden. Auch das Min liefer nur einen Datensatz.

Gruß Jörg
 
Ich gehe davon aus das jede ID nur einmal vorhanden ist, deswegen brauchst du keine gruppe auf die ID bilden.
Das halte ich ja mal für ein Gerücht, auch hier gilt: Jede Spalte im Select muss aggregiert oder gruppiert werden. Das die ID eindeutig ist tut nichts zur Sache, die DB muss trotzdem wissen, was sie anzeigen soll.
 
Es gibt eine klitze kleine Ausnahme:

Code:
test=*# create table demo (id int primary key, x int, val float);
CREATE TABLE
test=*# select id, x, avg(val) from demo group by id;
 id | x | avg
----+---+-----
(0 Zeilen)

Die Spalte x ist weder aggregiert noch gruppiert, und dennoch meckert PostgreSQL nicht. Warum?

Es wird nach id gruppiert, diese Spalte ist aber der PK der Tabelle. Noch weiter gruppieren geht nicht, hier erkennt PG, daß man auf das GROUP BY nach x verzichten kann. Das nur mal am Rande...
 
Ein SQL wird einmal geschrieben und 20mal gelesen.
Solche Arten von "Vereinfachung" tragen nicht unbedingt zur Verbesserung der Lesbarkeit bei.
Des Weiteren kann man einen PK Constraint auch droppen oder abschalten - dann würden plötzliche die SQLs Fehler verursachen.
Portabel ist so ein SQL auch nicht, eine vernünftige DB wird das aus den obigen Gründen ablehnen. Eine Unsitte, die pgsql wohl von MySQL übernommen hat:
Code:
SQL> create table t (id number primary key, col1 number,col2 number);
Tabelle wurde erstellt.

SQL> select id,max(col1),col2 from t group by col2;
select id,max(col1),col2 from t group by col2
       *
FEHLER in Zeile 1:
ORA-00979: Kein GROUP BY-Ausdruck

Mal davon angesehen ist ein Group By mit einem PK/Unique Key sowieso kompletter Unsinn.
 
Werbung:
Zurück
Oben