🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.datenbanken.misc
4 messages
4 total messages Started by Mike Pfaff Mon, 11 Jun 2001 09:36
Richtige L�sung einer Pr�fungsaufgabe?
#2
Author: Mike Pfaff
Date: Mon, 11 Jun 2001 09:36
63 lines
2871 bytes
Hallo zusammen

Ich habe eine Meinungsverschiedenheit mit meinem Datenbank-Dozenten
betreffend der richtigen L�sung einer Pr�fungsaufgabe. Unten seht ihr die
Datenbankstruktur und die beiden L�sungen. Mir ist nicht klar, was an meiner
L�sung falsch sein soll. Der Dozent behauptet, das funktioniere so nicht mit
Subqueries hinter dem FROM(Steht aber so im Referenz-Manual, das er uns
abgegeben hat) und das sei sowieso nicht behandelt worden.

Ich w�re froh, wenn mir ein Spezialist aus dieser Newsgroup entweder die
Richtigkeit meiner L�sung best�tigen k�nnte oder mir darlegen k�nnte, was
ich falsch gemacht habe.

Vielen Dank im voraus,

Mike Pfaff

Datenbanksystem:
----------------
Oracle

Tabellen:
---------
Kunde: nummer, name, vorname, adresse
Bestellung: nummer, datum, k_nummer
Bestellposten: b_nummer, a_code, menge
Artikel: code, bezeichnung

Fremdschl�ssel:
---------------
Bestellung.k_nummer (zu Kunde.nummer)
Bestellposten.b_nummer (zu Bestellung.nummer)
Bestellposten.a_code (zu Artikel.code)

Meine L�sung:
-------------
SELECT code, bezeichnung, summe
FROM
    (
    SELECT code, bezeichnung, SUM(menge) AS summe
    FROM
        (
        SELECT code, bezeichnung, datum, menge
        FROM Bestellung, Bestellposten, Artikel
        WHERE code = a_code
        AND Bestellung.nummer = Bestellposten.b_nummer
        )
    WHERE datum BETWEEN
    TO_DATE('1.1.1999','dd.mm.yyyy') AND TO_DATE('31.12.1999','dd.mm.yyyy')
    GROUP BY code
    )
ORDER BY summe DESC;

Muster-L�sung:
--------------
SELECT code, bezeichnung, SUM(menge)
FROM Artikel a, Bestellposten p, Bestellung b
WHERE a.code = p.a_code
AND p.b_nummer = b.nummer
AND datum BETWEEN
TO_DATE('1.1.1999','dd.mm.yyyy') AND TO_DATE('31.12.1999','dd.mm.yyyy')
GROUP BY code, bezeichnung
ORDER BY 3 DESC;
Re: Richtige Lösung einer Prüfungsaufgabe?
#3
Author: Ulrik Hoffmann
Date: Mon, 11 Jun 2001 09:49
26 lines
2105 bytes
"Mike Pfaff" <blacklotus@datacomm.ch> schrieb im Newsbeitrag
news:9g239e$6o5qb$1@ID-86276.news.dfncis.de...
> Ich habe eine Meinungsverschiedenheit mit meinem Datenbank-Dozenten
> betreffend der richtigen L�sung einer Pr�fungsaufgabe. Unten seht ihr die
> Datenbankstruktur und die beiden L�sungen. Mir ist nicht klar, was an
meiner
> L�sung falsch sein soll. Der Dozent behauptet, das funktioniere so nicht
mit
> Subqueries hinter dem FROM(Steht aber so im Referenz-Manual, das er uns
> abgegeben hat) und das sei sowieso nicht behandelt worden.
>
[SQL gesnippt]


Hallo Mike,

Deine L�sung ist nicht falsch, aber alles andere als elegant. Dein �u�erstes
SQL-Statement ist �berfl�ssig. Ich w�rde das auch immer so wie der Prof.
machen. Abgesehen davon funktionieren Subqueries beweisbar nach dem "from"
in Oracle sehr gut.

Viel Spa� bei der Auseinandersetzung mit dem Prof.

Gru�
Ulrik
Re: Richtige Lösung einer Prüfungsaufgabe?
#4
Author: Ulrik Hoffmann
Date: Mon, 11 Jun 2001 10:02
121 lines
4592 bytes
"Ulrik Hoffmann" <ulrik.peer@hoffmann-kiel.de> schrieb im Newsbeitrag
news:9g247b$6kjq5$1@ID-13717.news.dfncis.de...
>
> > Ich habe eine Meinungsverschiedenheit mit meinem Datenbank-Dozenten
> > betreffend der richtigen L�sung einer Pr�fungsaufgabe. Unten seht ihr
die
> > Datenbankstruktur und die beiden L�sungen. Mir ist nicht klar, was an
> meiner
> > L�sung falsch sein soll. Der Dozent behauptet, das funktioniere so nicht
> mit
> > Subqueries hinter dem FROM(Steht aber so im Referenz-Manual, das er uns
> > abgegeben hat) und das sei sowieso nicht behandelt worden.
> >
> [SQL gesnippt]
> Deine L�sung ist nicht falsch, aber alles andere als elegant. Dein
�u�erstes
> SQL-Statement ist �berfl�ssig. Ich w�rde das auch immer so wie der Prof.
> machen. Abgesehen davon funktionieren Subqueries beweisbar nach dem "from"
> in Oracle sehr gut.

Leider ist Deine L�ung doch falsch: es liegt an der falschen Group by
Expression, nicht an den Selects nach dem From:

Protokoll:


SQL> create table kunde(
  2  Kunde varchar2(100),
  3  name varchar2(100),
  4  vorname varchar2(100),
  5  adresse varchar2(100));

Tabelle wurde angelegt.

SQL> create table
  2  Bestellung
  3  ( nummer varchar2(100),
  4    datum date,
  5    k_nummer varchar2(100))
  6  ;

Tabelle wurde angelegt.

SQL> create table
  2  Bestellposten
  3  (b_nummer varchar2(100),
  4  a_code varchar2(100),
  5   menge varchar2(100))
  6   ;

Tabelle wurde angelegt.

SQL> create table Artikel
  2  (code varchar2(100),
  3  bezeichnung varchar2(100));

Tabelle wurde angelegt.

SQL> SELECT code, bezeichnung, summe
  2  FROM
  3      (
  4      SELECT code, bezeichnung, SUM(menge) AS summe
  5      FROM
  6          (
  7          SELECT code, bezeichnung, datum, menge
  8          FROM Bestellung, Bestellposten, Artikel
  9          WHERE code = a_code
 10          AND Bestellung.nummer = Bestellposten.b_nummer
 11          )
 12      WHERE datum BETWEEN
 13      TO_DATE('1.1.1999','dd.mm.yyyy') AND
TO_DATE('31.12.1999','dd.mm.yyyy')
 14      GROUP BY code
 15      )
 16  ORDER BY summe DESC;
    SELECT code, bezeichnung, SUM(menge) AS summe
                 *
FEHLER in Zeile 4:
ORA-00979: not a GROUP BY expression


SQL>
SQL> SELECT code, bezeichnung, SUM(menge)
  2  FROM Artikel a, Bestellposten p, Bestellung b
  3  WHERE a.code = p.a_code
  4  AND p.b_nummer = b.nummer
  5  AND datum BETWEEN
  6  TO_DATE('1.1.1999','dd.mm.yyyy') AND TO_DATE('31.12.1999','dd.mm.yyyy')
  7  GROUP BY code, bezeichnung
  8  ORDER BY 3 DESC;

Es wurden keine Zeilen ausgew�hlt



So funktioniert auch Deine L�sung:

SQL> SELECT code, bezeichnung, summe
  2  FROM
  3      (
  4      SELECT code, bezeichnung, SUM(menge) AS summe
  5      FROM
  6          (
  7          SELECT code, bezeichnung, datum, menge
  8          FROM Bestellung, Bestellposten, Artikel
  9          WHERE code = a_code
 10          AND Bestellung.nummer = Bestellposten.b_nummer
 11          )
 12      WHERE datum BETWEEN
 13      TO_DATE('1.1.1999','dd.mm.yyyy') AND TO_DATE('31.12.1999','d
 14      GROUP BY code, bezeichnung
 15      )
 16  ORDER BY summe DESC;

Es wurden keine Zeilen ausgew�hlt



Gru�
Ulrik
Re: Richtige L�sung einer Pr�fungsaufgabe?
#5
Author: Dieter N�th
Date: Mon, 11 Jun 2001 12:27
14 lines
1528 bytes
Mike Pfaff wrote:
>Der Dozent behauptet, das funktioniere so nicht mit
>Subqueries hinter dem FROM(Steht aber so im Referenz-Manual, das er
uns
>abgegeben hat) und das sei sowieso nicht behandelt worden.


Ein SELECT im FROM anstelle von Table/View ist ANSI-SQL 92, allerdings
nicht aus dem Entry-Level, sondern Intermediate (oder sogar Full?) und
hei�t "Derived Table".
Nat�rlich ist deine L�sung weder elegant noch performant, aber bis auf
das falsche group by richtig.

Dieter
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads