Beate Mielke: ORACLE - Unterabfrage, wie?

Hallo ForumerInnen,

folgende Abfrage unter ORACLE funktioniert nicht, weil der where-Teil am Ende steht:

select a.href, count(*)*100/b.spalte as QUANTUM from TABELLE1 a, TABELLE2 b  group by a.href, b.spalte order by QUANTUM desc, href  where rownum < 16;

1.) Wer kann mir sagen, wie ich den Ausdruck modifizieren muß, damit von dem Gesamtergebnis wirklich nur die ersten 15 Zeilen ausgegeben werden? Der Ausdruck "group by" MUSS vor dem where-Teil kommen. Vielleicht über eine Zwischentabelle?

2.)Unter ORACLE wird mir das Ergebnis (wenn es denn mal ohne where angeschaut wird) mit zuvielen Nachkommastellen ausgegeben. Wie kann ich errreichen daß die Ausgabewerte nur zwei Nachkommastellen haben?

Gruß

Beate Mielke

  1. Hallo Beate,

    zu Deiner ersten Frage

    select a.href, count(*)*100/b.spalte as QUANTUM from TABELLE1 a,
    TABELLE2 b  group by a.href, b.spalte order by QUANTUM desc, href  
    HAVING rownum < 16;
    ------

    Du kannst due Ausgabe nach einer Gruppierung nicht mit einer WHERE-
    Klausel einschränken. Dafür gibt es HAVING. Mit WHERE kannst Du lediglich
    die Ergebnisse einschränken, die danach von GROUP BY zusammengefasst werden.

    Zu Deiner 2. Frage
    SELECT TRUNC(123.456, 2) FROM DUAL Ergibt 123.45

    Tschau, Stefan

    Hallo ForumerInnen,

    folgende Abfrage unter ORACLE funktioniert nicht, weil der where-Teil am Ende steht:

    select a.href, count(*)*100/b.spalte as QUANTUM from TABELLE1 a, TABELLE2 b  group by a.href, b.spalte order by QUANTUM desc, href  where rownum < 16;

    1.) Wer kann mir sagen, wie ich den Ausdruck modifizieren muß, damit von dem Gesamtergebnis wirklich nur die ersten 15 Zeilen ausgegeben werden? Der Ausdruck "group by" MUSS vor dem where-Teil kommen. Vielleicht über eine Zwischentabelle?

    2.)Unter ORACLE wird mir das Ergebnis (wenn es denn mal ohne where angeschaut wird) mit zuvielen Nachkommastellen ausgegeben. Wie kann ich errreichen daß die Ausgabewerte nur zwei Nachkommastellen haben?

    Gruß

    Beate Mielke

    1. Hallo Stefan,

      select a.href, count(*)*100/b.spalte as QUANTUM from TABELLE1 a,
      TABELLE2 b  group by a.href, b.spalte order by QUANTUM desc, href  
      HAVING rownum < 16;

      ich hatte mich schon gefreut, daß die Lösung so einfach sein soll - aber leider -
      kommt jetzt genau bei HAVING eine Fehlermeldung :-(

      Gruß

      Beate

  2. Hallo Beate

    select a.href, count(*)*100/b.spalte as QUANTUM from TABELLE1 a, TABELLE2 b  group by a.href, b.spalte order by QUANTUM desc, href  where rownum < 16;

    Wenn mich meine SQL Kenntnisse nicht ganz verlassen haben dann hast Du bei der order by un bei der where Bedingung die Tabelle vergessen.

    select a.href, count(*)*100/b.spalte as QUANTUM from TABELLE1 a, TABELLE2 b  group by a.href, b.spalte order by QUANTUM desc, a.href  where a.rownum < 16;

    Gruß
    Jürgen