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

Subquery mit Group By - Oracle Sql

Dieses Thema im Forum "Oracle" wurde erstellt von Webdesigner, 22 Dezember 2017.

  1. Webdesigner

    Webdesigner Benutzer

    Hallo,

    wenn ich folgenden SQL-Statement ausführe, funktioniert mein Ergebnis.

    Select * FROM (Select b.p,(Select "Std" FROM testView a WHERE a.p=b.p AND rownum<=1) as "Std" FROM testView b GROUP BY b.p)o,LVA u

    Wenn ich nun den Statement

    Select * FROM (Select b.p,(Select "Std" FROM testView a WHERE a.p=b.p AND rownum<=1) as "Std" FROM testView b GROUP BY b.p)o,LVA u WHERE o.p=u.p

    ausführe bekomme ich die Fehlermeldung:

    ORA-00979: Kein GROUP BY-Ausdruck

    Woran könnte das liegen? Wie kann das Problem beseitigt werden?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ich *vermute* mal den Klassiker. Nicht alle Spalten im Resultat sind aggregiert/gruppiert. Dein SQL ist schwer zu interpretieren. Da ist offenbar ein View ( testView ) im Spiel, ein SELECT *, ein CROSS JOIN (o,LVA u).

    Siehe auch ORA-00979 not a group by expression
     
  3. Webdesigner

    Webdesigner Benutzer

    Hallo,
    warum müssen alle Spalten im Resultat aggregiert/gruppiert sein?
    Mfg
     
  4. akretschmer

    akretschmer Datenbank-Guru

    weil alles andere keinen Sinn ergibt. Alles andere ist schlicht logisch falsch. Du kannst auf MySQL umsteigen, das erlaubt das (noch). Das Resultat ist dann halt nicht vorhersagbar und daher eher falsch, aber es kommt keine Fehlermeldung. Wähle also zwischen logisch und inhaltlich richtig oder Bullshit.

    Code:
    test=*# create table xyz(a int, b int);
    CREATE TABLE
    test=*# insert into xyz values (1,10);
    INSERT 0 1
    test=*# insert into xyz values (2,20);
    INSERT 0 1
    test=*# select a, sum(b) from xyz;
    
    Was *exakt* erwartest Du jetzt in der Spalte a? 'b' ist rivial, 30. Aber soll in a nun 1 oder 2 stehen?

    Code:
    test=*# select a, sum(b) from xyz;
    FEHLER:  Spalte »xyz.a« muss in der GROUP-BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden
    ZEILE 1: select a, sum(b) from xyz;
      ^
    test=*# 
    
     
  5. Webdesigner

    Webdesigner Benutzer

    Hallo.
    vielen Dank für Ihre Mühe. Nun habe ich es verstanden. Mein SQL-Statement ohne der WHERE - Klausel funktioniert schon, also müssen alle Spalten aggregiert sein. Beim Hinzufügen der WHERE Klausel passiert der Fehler. Haben Sie eine Vermutung, woran das liegen könnte?
    vielen Dank.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ich kenne die Tabellen nicht, die dem zugrunde liegen. Generelle Regel: vermeide select *, nenne stattdessen alle Spalten direkt auf, die im Result sein sollen.
     
    Kampfgummibaerlie gefällt das.
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