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 ajoin kunden k on k.kunde_nr = a.kunde_nr join auftragspositionen p on a.auftrag_nr = p.auftrag_nrgroup 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:
|
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_nrfrom auftraege a left outer join rechnungen r on a.auftrag_nr = r.auftrag_nr where r.auftrag_nr is null; |