DarkSQL by Darkleo.com

DarkSQL

Subqueries


Nenne je Kunde (Kundennummer) die Rechnungsnummer der Rechnung, welche die maximale Differenz zwischen Rechnungsdatum und Zahldatum von allen seinen Rechnungen hat.

select kunde_nr, rechnung_nr
from rechnungen r1
where rechnung_datum-zahldatum =
(select max(rechnung_datum-zahldatum)
from rechnungen r2 where r1.kunde_nr = r2.Kunde_nr);

Stellen Sie folgende Liste auf: Kundennummer, Name, Anzahl der Aufträge des Kunden in 2001, Anzahl der Rechnungen des Kunden in 2001. Schreiben Sie die Zeichenkette „Nicht vorhanden" anstelle des Wertes 0 bei jeder der beiden Zahlen.

select kunde_nr, name,
(select case when count(*) = 0 then
'Nicht vorhanden '
else cast (count(*) as char ) end
from
auftraege a
where a.kunde_nr = k.kunde_nr
and
auftrag_datum between '01-01-2001'
and
'31-12-2001 ') ,
(select case when count(*) = 0 then
'Nicht vorhanden ' else
cast (count(*) as char ) end
from
rechnungen r
where r.kunde_nr = k.kunde_nr and
rechnung_datum between '01-01-2001'
and '31-12-2001 ')
from kunden k;

Welche Artikel kommen in keiner Auftragsposition vor (Nur Artikelnummer zeigen)

select artikel_nr
from artikel
where artikel_nr not in (select artikel_nr from auftragspositionen);

Liste alle Artikel auf, die in wenigstens einer Auftragsposition vorkommen. Geben Sie für die Lösung dieser Aufgabe 4 Alternativen mit Subqueries an.

select artikel_nr
from artikel
where artikel_nr in
(select
artikel_nr
from auftragspositionen);

select
artikel_nr
from artikel a
where exists
(select artikel_nr
from auftragspositionen b
where a.artikel_nr=b.artikel_nr);

select artikel_nr
from artikel
where artikel_nr = any
(select artikel_nr
from auftragspositionen);

select artikel_nr
from artikel a
where (select count(*)
from
auftragspositionen p
where a.artikel_nr=p.artikel_nr )>0;

Welche Artikel haben die größte Gewinnspanne ihrer Gruppe (Differenz Verkaufspreis / Einkaufspreis). Liste den Artikel, die Gruppe, die Gewinnspanne. Ausgabe sortiert nach Spanne.

select artikel_nr, a.warengruppe, verkaufspreis-einkaufspreis
from artikel a
where verkaufspreis-einkaufspreis = (select max(verkaufspreis- einkaufspreis)
from artikel b
where a.warengruppe = b.warengruppe)
order by
verkaufspreis-einkaufspreis;

Liste alle Kunden (Kundennummer, Name) auf, für die eine unbezahlte Rechnung existiert.

select kunde_nr, name
from kunden
where kunde_nr in
(select
kunde_nr
from rechnungen
where bezahlt = 0);

Alternative Lösungen mit exists, =any, count

Liste für alle Kunden , für die eine unbezahlte Rechnung existiert, die Kundennumer, den Namen und die Summe der Rechnungsbeträge der unbezahlten Rechnungen auf.

select kunde_nr, name,
(select sum(rechnung_betrag)
from rechnungen r
where r.kunde_nr=k.kunde_nr and bezahlt = 0)
from kunden k
where kunde_nr in
(select
kunde_nr from rechnungen where bezahlt = 0);