Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Abfrage SQL Verständnisproblem

Dieses Thema im Forum "Oracle" wurde erstellt von m0w11, 10 Januar 2017.

  1. m0w11

    m0w11 Neuer Benutzer

    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?
     
  2. drdimitri

    drdimitri Datenbank-Guru

    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.
     
  3. Commu

    Commu Neuer Benutzer

    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
     
  4. ukulele

    ukulele Datenbank-Guru

    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.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    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...
     
  6. drdimitri

    drdimitri Datenbank-Guru

    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.
     
    Walter und akretschmer gefällt das.
  7. akretschmer

    akretschmer Datenbank-Guru

    Hey, ich wollte es nur nennen / erklären. Nicht, daß ich das gut finde ;-)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden