DarkSQL by Darkleo.com

DarkSQL

Join


Erzeugen Sie eine Liste, die den durchschnittlichen Auftragsrabatt aller Aufträge je Kundengruppe anzeigt.

select kundengruppe, avg(rabatt)
from auftraege
join kunden on kunden.kunde_nr = auftraege.kunde_nr
group by kundengruppe;

Erzeugen Sie eine Liste mit folgenden Daten: Kundennummer, Name, Auftragsnummer, Auftragswert (=Preis *Menge summiert über alle Positionen des Auftrages)

select k.kunde_nr, name , a.auftrag_nr , sum(menge*preis)

from auftraege a
 join kunden k on k.kunde_nr = a.kunde_nr

 join auftragspositionen p on a.auftrag_nr = p.auftrag_nr
group by k.kunde_nr, name, a.auftrag_nr;

Erstellen Sie eine Liste, die je Artikel (Artikelnummer reicht) die durchschnittliche Abweichung des Verkaufspreises (Attribut Verkaufspreis im Artikelstamm) von den in Aufträgen erzielten Verkaufspreisen (Attribut Preis in Auftragspositionen) angibt. Ausgabe nur, wenn die Abweichung größer als 10% des Verkaufspreises (Artikelstamm)ist.

select a.artikel_nr , avg(a.verkaufspreis- p.preis)
from artikel a
join auftragspositionen p on a.artikel_nr = p.artikel_nr
group by a.artikel_nr
having avg(a.verkaufspreis-p.preis) > 0.1* avg( a.verkaufspreis);

In der having-Klausel muß mit dem „Trick" 0.1*avg(a.verkaufspreis) gearbeitet werden, statt 0.1*verkaufspreis. Die having-Klausel lässt im bedingten Ausdruck nur Konstante oder Aggregatfunktionen zu. Da der Verkaufspreis ist Artikelstamm aber immer gleich ist und im Gegensatz zum Preis in der Position nicht variiert, gilt:
avg(a.verkaufspreis) = a.verkaufspreis

Wurden Artikel im Zeitraum 1.Januar 2001 bis 31.12.2002 mehr als 1 x verkauft (verkauft = kommt in einer Auftragsposition vor) ? Wenn ja, welche (Artikelnummer, Bezeichnung) und wie oft ?

select a.artikel_nr , a.bezeichnung , count(*)
from artikel a
join auftragspositionen p on a.artikel_nr = p.artikel_nr
join auftraege au on p.auftrag_nr = au.auftrag_nr
where extract (year from auftrag_datum) between 2001 and 2002
group by a.artikel_nr, a.bezeichnung
having count(*) > 1;

Listen Sie auf, wie oft jeder Artikel überhaupt bisher verkauft wurde (s.o.). Wurde er noch nicht verkauft, schreiben Sie in die Spalte anstelle der Anzahl der Verkäufe die Zeichenkette ’kein Verkauf’.

select a.artikel_nr , a.bezeichnung ,
case
when
count(*) = 0 then 'kein Verkauf '
else cast( count(*) as char)
end
from artikel a
left outer join
auftragspositionen p
on a.artikel_nr = p.artikel_nr
group by a.artikel_nr, a.bezeichnung;

Zu welchen Aufträgen (nur Auftragsnummer) wurde noch keine Rechnung geschrieben.

select a.auftrag_nr
from auftraege a
left outer join rechnungen r
on a.auftrag_nr = r.auftrag_nr
where r.auftrag_nr is null;