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

Group By in Join

Dieses Thema im Forum "Oracle" wurde erstellt von gurbelunder, 15 November 2013.

  1. gurbelunder

    gurbelunder Datenbank-Guru

    Hi zusammen,

    heute habe ich mal wieder einen Hänger und die Brille ist gerade irgendwie nicht gut genug geputzt.

    Unter Oracle habe ich eine Tabelle, in der einmal in der Woche die aktuelle Größe aller Tablespaces eingetragen wird. Hierauf möchte ich eine Wachstumsübersicht generieren und habe dafür den folgenden SELECT geschrieben:

    Code:
    select a.tablespace_name, a.usedsizemb "old size", b.usedsizemb "new size", a.maxsizemb, round(sum(b.usedsizemb) - sum(a.usedsizemb)) "Growth in MB"
    from 
    ( select tablespace_name, usedsizemb, maxsizemb
      from tbs_growth
      where TO_CHAR(updated_at, 'DD.MM.RRRR') = TO_CHAR(sysdate, 'DD.MM.RRRR')) a,
    ( select tablespace_name, usedsizemb, maxsizemb
      from tbs_growth
      where TO_CHAR(updated_at, 'DD.MM.RRRR') = TO_CHAR(sysdate+7, 'DD.MM.RRRR')) b,
    ( select distinct tablespace_name
      from tbs_growth) c
    where a.tablespace_name = b.tablespace_name
    group by a.tablespace_name
    order by a.tablespace_name;
    
    Allerdings ist der Fehler, der mir zurückgeworfen wird, dieser:

    Code:
    ORA-00979: Kein GROUP BY-Ausdruck
    00979. 00000 -  "not a GROUP BY expression"
    *Cause:    
    *Action:
    Fehler in Zeile: 1 Spalte: 27
    
    Die GROUP BY Klausel brauche ich hier aber definitiv, da ich ja ein SUM mache. Lasse ich den Alias "a" weg, kann er, logischerweise, das Feld "tablespace_name" nicht finden.

    Ich bin gerade irgendwie betriebsblind und find's nicht. Könnt ihr mal was sehen?

    Danke euch und Gruß,
    David
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ich denke, da fehlen Spalten in der GROUP BY - Aufzählung. Es müssen alles Spalten entweder im GROUP BY oder aggregiert werden - was ist z.B. mit a.maxsizemb ?
     
  3. gurbelunder

    gurbelunder Datenbank-Guru

    Nach "a.maxesizemb" zu gruppieren wäre hier strafbar, das ist eigentlich nur eine Angabe für eine schicke Ausgabe, wäre aber eigentlich gar nicht notwendig. Hauptsächlich geht es hier um "a.usedsizemb", "b.usedsizemb" und deren Differenz. Ich habe daher vorerst "a.maxsizemb" rausgeschmissen.

    Als ich ihm dann aber die beiden Felder "a.usedsizemb" und "b.usedsizemb" im GROUP BY gegeben habe, hat's wunderbar geklappt.

    Code:
    select a.tablespace_name, a.usedsizemb "old size", b.usedsizemb "new size", round(sum(b.usedsizemb) - sum(a.usedsizemb)) "Growth in MB"
    from 
    ( select tablespace_name, usedsizemb
      from tbs_growth
      where TO_CHAR(updated_at, 'DD.MM.RRRR') = TO_CHAR(sysdate, 'DD.MM.RRRR')) a,
    ( select tablespace_name, usedsizemb
      from tbs_growth
      where TO_CHAR(updated_at, 'DD.MM.RRRR') = TO_CHAR(sysdate+7, 'DD.MM.RRRR')) b,
    ( select distinct tablespace_name
      from tbs_growth) c
    where a.tablespace_name = b.tablespace_name
    group by a.tablespace_name, a.usedsizemb, b.usedsizemb
    order by a.tablespace_name;
    
    So richtig Sinn ergibt's mir gerade nur nicht.

    Kurz mal zu "a.maxsizemb": Hier hinter steckt die maximale Größe eines Tablespaces unter Oracle, die an die maximale Größe eines Datenfiles gebunden ist. Ist also Oracle spezifisch in diesem Fall ;)
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ja, ist halt so, wie ich es sagte. Du kannst natürlich MySQL nehmen, daß scheißt kräftig auf die SQL-Spec.

    Mach halt erst die Aggregation und joine an das Resultat dann dran, was noch so brauchst...
     
  5. gurbelunder

    gurbelunder Datenbank-Guru

    Wir nutzen nur Oracle Server auf Arbeit. Das aber auch aus dem Grund, weil hier starke HighEnd Applikationen aus dem B2B Feld laufen...
     
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