Zum Inhalt springen

Datenbanken und betriebliche Datenmodelle – Gruppierungen und Kennzahlen berechnen

Aus MOOCsWiki Staging
aiMOOC-Siegel aiMOOC

Datenbanken und betriebliche Datenmodelle – Gruppierungen und Kennzahlen berechnen

QR-Code



Datenbanken und betriebliche Datenmodelle – Gruppierungen und Kennzahlen berechnen

Zielgruppe: Auszubildende in kaufmännischen und IT-Berufen

Kurzbeschreibung: Aggregation und Bezugsgröße – betriebliche Daten mit SQL gruppieren und aussagekräftige Kennzahlen berechnen.

Lernzeit: ca. 60–90 Minuten

Voraussetzungen: Grundkenntnisse zu Tabellen und einfachen SQL-Abfragen.

Lernform: Fünf kurze Lerneinheiten, ein fiktiver Ausbildungsfall, lokale SQL-Experimente, interaktive Übungen und Transferaufgaben.


Einleitung

Wie viele Artikel wurden verkauft? Welche Warengruppe erzielt den höchsten Umsatz? Und was bedeutet der durchschnittliche Umsatz pro Auftrag?

In diesem aiMOOC lernst Du, wie Du mit SQL Daten gruppierst, Kennzahlen berechnest und die passende Bezugsgröße auswählst.


Deine Lernziele

Nach dem Kurs kannst Du:

  1. Datenmodelle mit Primär- und Fremdschlüsseln verstehen.
  2. Aggregationen mit SUM, COUNT und AVG berechnen.
  3. Mit GROUP BY und HAVING betriebliche Auswertungen erstellen.
  4. Den Unterschied zwischen Stückzahl, Auftragszahl und Umsatz erklären.
  5. Kennzahlen prüfen, visualisieren und für betriebliche Entscheidungen nutzen.


Lernpfad

Lerneinheit Thema Zeit
Einstieg Betriebliche Daten verstehen 8 Minuten
Basis Aggregation und Kennzahlen 10 Minuten
Anwendung Daten gruppieren 12 Minuten
Vertiefung Bezugsgrößen richtig wählen 12 Minuten
Transfer Ergebnisse prüfen und bewerten 10 Minuten

Die übrige Zeit nutzt Du für die interaktiven Übungen und den Lernnachweis.


Ausbildungsfall: Fahrradhandel Nordstern

Du arbeitest im fiktiven Fahrradhandel Nordstern. Deine Ausbilderin benötigt eine Auswertung der Verkäufe eines Beispieltages.

Die Daten bestehen ausschließlich aus erfundenen Artikeln und Aufträgen.

Dein Arbeitsauftrag: Berechne Stückzahlen, Umsätze und durchschnittliche Umsätze pro Auftrag.


Lerneinheit 1: Das betriebliche Datenmodell

Eine Relationale Datenbank speichert Informationen in Tabellen. Ein Primärschlüssel identifiziert einen Datensatz eindeutig. Ein Fremdschlüssel stellt die Beziehung zu einer anderen Tabelle her.

Abbildung: Grundbegriffe einer relationalen Tabelle.

Abbildung: Beispiel eines Entity-Relationship-Modells aus einem anderen Anwendungsbereich.

Unser vereinfachtes Betriebsmodell:

Tabelle Wichtige Felder Bedeutung
artikel artikel_id, name, warengruppe Artikelstammdaten
position positions_id, auftrag_id, artikel_id, menge, einzelpreis_cent Verkaufspositionen

Beziehung: position.artikel_id verweist auf artikel.artikel_id. Ein Artikel kann in mehreren Verkaufspositionen erscheinen.

Die Auftragsnummer wird im vereinfachten Modell direkt in der Position gespeichert. Eine separate Auftragstabelle ist nicht Bestandteil dieser Übung.


Beispieldaten

Auftrag Artikel Warengruppe Menge Einzelpreis netto Positionsumsatz
1001 Helm Schutz 2 30 € 60 €
1001 Licht Zubehör 1 20 € 20 €
1002 Schloss Zubehör 3 15 € 45 €
1002 Helm Schutz 1 30 € 30 €
1003 Licht Zubehör 2 20 € 40 €
1004 Weste Schutz 4 10 € 40 €
1004 Schloss Zubehör 1 15 € 15 €
1005 Helm Schutz 1 30 € 30 €

Kontrolle: Acht Verkaufspositionen, fünf unterschiedliche Aufträge, 15 verkaufte Stück und 280 € Nettoumsatz.

Alle Preise sind fiktive Nettopreise. Rabatte, Retouren und Umsatzsteuer bleiben in diesem Übungsmodell unberücksichtigt.


Mini-Aufgabe: Eine Tabellenzeile verstehen

Erkläre, weshalb der Auftrag 1001 zweimal vorkommt, obwohl er nur ein Auftrag ist.

Feedback: Ein Auftrag kann mehrere Positionen enthalten. Deshalb entspricht die Anzahl der Tabellenzeilen nicht automatisch der Anzahl der Aufträge.


Lerneinheit 2: Aggregation und Kennzahlen

Aggregation bedeutet, mehrere Werte zu einer zusammenfassenden Größe zu verdichten.

SQL-Funktion Bedeutung Beispiel
SUM Summe Verkaufte Stück
COUNT Anzahl Verkaufspositionen
AVG Arithmetischer Mittelwert Durchschnittspreis je Position
MIN Kleinster Wert Niedrigster Preis
MAX Größter Wert Höchster Preis

Merke: Jede Kennzahl braucht eine eindeutige fachliche Definition.


SQL-Beispiel: Positionen und Stückzahlen

SELECT
    COUNT(*) AS positionen,
    SUM(menge) AS stueck
FROM position;

Ergebnis:

Positionen Stück
8 15

COUNT(*) zählt Zeilen. SUM(menge) addiert die verkauften Mengen.


Mini-Aufgabe: Unterschied erklären

Warum liefert COUNT(*) den Wert 8, während SUM(menge) den Wert 15 liefert?

Feedback: Die Zeilenzahl und die Anzahl verkaufter Einheiten sind unterschiedliche Bezugsgrößen.


Lerneinheit 3: Mit GROUP BY gruppieren

Mit GROUP BY fasst Du Datensätze zusammen, die denselben Wert eines Gruppierungsmerkmals haben.

SELECT
    a.warengruppe,
    SUM(p.menge) AS stueck
FROM position AS p
JOIN artikel AS a
    ON p.artikel_id = a.artikel_id
GROUP BY a.warengruppe
ORDER BY a.warengruppe;

Ergebnis:

Warengruppe Verkauft
Schutz 8 Stück
Zubehör 7 Stück

Warum JOIN? Die Warengruppe steht in der Artikeltabelle, die verkaufte Menge in der Positionstabelle. Der JOIN verknüpft beide Tabellen über die Artikel-ID.

Video: InformatikVideos – Group By und Having, SQL-Tutorial mit Beispielen.


Mini-Aufgabe: Gruppierung verändern

Ersetze gedanklich GROUP BY a.warengruppe durch GROUP BY p.auftrag_id.

Welche Art von Ergebnis entsteht?

Feedback: Du erhältst eine Auswertung pro Auftrag statt pro Warengruppe. Die Gruppierung bestimmt die fachliche Perspektive.


Lerneinheit 4: Bezugsgrößen richtig wählen

Eine Bezugsgröße beschreibt, worauf sich eine Kennzahl bezieht.

Die gleiche Umsatzsumme kann beispielsweise auf Aufträge, Positionen oder verkaufte Stück bezogen werden. Dadurch entstehen unterschiedliche Kennzahlen.


Beispiel: Umsatz und Aufträge

Warengruppe Stück Nettoumsatz Unterschiedliche Aufträge Umsatz je beteiligtem Auftrag
Schutz 8 160 € 4 40 €
Zubehör 7 120 € 4 30 €

Formel:

Umsatz je beteiligtem Auftrag einer Warengruppe = Umsatz dieser Warengruppe / Anzahl unterschiedlicher Aufträge mit mindestens einer Position dieser Warengruppe.

Schutz: 160 € / 4 = 40 €.

Zubehör: 120 € / 4 = 30 €.

Beide Warengruppen kommen teilweise in denselben Aufträgen vor. Deshalb ergeben vier plus vier Warengruppen-Auftragszuordnungen nicht acht unterschiedliche Aufträge im Gesamtbetrieb.


Visualisierung: Umsatz nach Warengruppe

Warengruppe Balken Nettoumsatz
Schutz ████████ 160 €
Zubehör ██████ 120 €

Maßstab: Ein Block entspricht 20 €.

Abbildung: Allgemeines Beispiel eines Balkendiagramms. Die tatsächlich berechneten Nordstern-Werte stehen in der Tabelle darüber.


Die richtige Kennzahl auswählen

Frage Zähler Nenner Ergebnis
Umsatz je Auftrag insgesamt 280 € 5 Aufträge 56 €
Umsatz je Verkaufsposition 280 € 8 Positionen 35 €
Umsatz je verkauftem Stück 280 € 15 Stück ca. 18,67 €

Achtung: AVG(einzelpreis_cent) würde in diesem Beispiel 21,25 € ergeben. Das ist der ungewichtete Durchschnitt der acht gespeicherten Positions-Einzelpreise, nicht der Umsatz je verkauftem Stück.

Abbildung: Ein allgemeiner Vergleich von Kreis- und Balkendiagramm. Überlege, welche Darstellungsform für zwei Umsatzwerte leichter abzulesen ist. Das Bild zeigt nicht die Nordstern-Daten.


Mini-Aufgabe: Warum verschiedene Durchschnitte?

Erkläre, warum 56 €, 35 € und 18,67 € gleichzeitig richtig sein können.

Feedback: Der Zähler ist identisch, aber der Nenner verändert sich. Jede Kennzahl beantwortet eine andere Frage.


Lerneinheit 5: Daten filtern und Ergebnisse prüfen

WHERE filtert einzelne Zeilen vor der Gruppierung.

HAVING filtert Gruppen nach der Aggregation.

Beispiel: Zeige nur Aufträge mit mindestens 60 € Nettoumsatz.

SELECT
    auftrag_id,
    SUM(menge * einzelpreis_cent) / 100.0
        AS umsatz_eur
FROM position
GROUP BY auftrag_id
HAVING SUM(menge * einzelpreis_cent) >= 6000
ORDER BY auftrag_id;

Ergebnis:

Auftrag Nettoumsatz
1001 80 €
1002 75 €

Die Preise werden in ganzen Cent gespeichert. Die Division durch 100.0 dient hier der Ausgabe in Euro.

Video: Patrick Boekhoven – GROUP BY, HAVING und Aggregatfunktionen in SQL.


Typische Fehler erkennen

Fehler Warum problematisch? Verbesserung
COUNT(*) als Stückzahl Positionen sind nicht Stück SUM(menge)
COUNT(*) als Auftragszahl Aufträge können mehrfach vorkommen COUNT(DISTINCT auftrag_id)
AVG(Einzelpreis) als Stückdurchschnitt Mengen werden nicht berücksichtigt Gesamtumsatz / Gesamtstückzahl
HAVING durch WHERE ersetzen Die Bedingung bezieht sich auf Gruppenergebnisse HAVING für Aggregatfilter
Auftragszahlen der Warengruppen addieren Ein Auftrag kann mehreren Gruppen angehören Aufträge insgesamt separat zählen

Hinweis zu fehlenden Werten: COUNT(*) zählt auch Zeilen mit NULL-Werten. COUNT(spalte), SUM(spalte) und AVG(spalte) ignorieren NULL in ihrem jeweiligen Argument. SUM und AVG können bei fehlenden gültigen Eingabewerten NULL liefern.


Lokales SQL-Labor: Isolierte Testumgebung

Sicherheit: Alle Experimente nutzen Python und SQLite ausschließlich lokal mit erfundenen Daten. Die Datenbank wird im Arbeitsspeicher erzeugt und nach dem Programmende verworfen. Es sind weder Internetverbindung noch Serverzugänge, Kundendaten oder eine Produktivdatenbank erforderlich.

Du benötigst eine lokale Python-3-Installation mit dem Standardmodul sqlite3.

Durchführung: Speichere den folgenden vollständigen Code als lernlabor.py und starte ihn lokal mit python lernlabor.py beziehungsweise python3 lernlabor.py.

Testprinzip: Aufgabe A enthält eine funktionierende Musterabfrage. Ersetze bei B und C jeweils die Zeichenfolge SELECT 'noch offen' durch Deine eigene SQL-Abfrage. Nach jedem Start erhältst Du automatisch Feedback.

import sqlite3

db = sqlite3.connect(":memory:")
db.execute("PRAGMA foreign_keys = ON")

db.executescript("""
CREATE TABLE artikel (
    artikel_id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    warengruppe TEXT NOT NULL
);

CREATE TABLE position (
    positions_id INTEGER PRIMARY KEY,
    auftrag_id INTEGER NOT NULL,
    artikel_id INTEGER NOT NULL
        REFERENCES artikel(artikel_id),
    menge INTEGER NOT NULL CHECK (menge > 0),
    einzelpreis_cent INTEGER NOT NULL
        CHECK (einzelpreis_cent >= 0)
);

INSERT INTO artikel VALUES
(1, 'Helm', 'Schutz'),
(2, 'Licht', 'Zubehör'),
(3, 'Schloss', 'Zubehör'),
(4, 'Weste', 'Schutz');

INSERT INTO position VALUES
(1, 1001, 1, 2, 3000),
(2, 1001, 2, 1, 2000),
(3, 1002, 3, 3, 1500),
(4, 1002, 1, 1, 3000),
(5, 1003, 2, 2, 2000),
(6, 1004, 4, 4, 1000),
(7, 1004, 3, 1, 1500),
(8, 1005, 1, 1, 3000);
""")

# A: Funktionierendes Basisbeispiel
SQL_A = """
SELECT a.warengruppe, SUM(p.menge)
FROM position AS p
JOIN artikel AS a
    ON a.artikel_id = p.artikel_id
GROUP BY a.warengruppe
ORDER BY a.warengruppe;
"""

# B: Nettoumsatz in Euro je Warengruppe
SQL_B = "SELECT 'noch offen'"

# C: Umsatz je beteiligtem Auftrag und Warengruppe
SQL_C = "SELECT 'noch offen'"

tests = [
    (
        "A: Stück je Warengruppe",
        SQL_A,
        [("Schutz", 8), ("Zubehör", 7)],
        "SUM(menge) addiert die verkauften Stück."
    ),
    (
        "B: Nettoumsatz je Warengruppe",
        SQL_B,
        [("Schutz", 160.0), ("Zubehör", 120.0)],
        "Berechne SUM(menge * einzelpreis_cent)"
        " und teile durch 100.0."
    ),
    (
        "C: Euro je beteiligtem Auftrag",
        SQL_C,
        [("Schutz", 40.0), ("Zubehör", 30.0)],
        "Teile den Gruppenumsatz durch"
        " COUNT(DISTINCT auftrag_id)."
    )
]

for titel, abfrage, erwartet, erklaerung in tests:
    print("\n" + titel)
    try:
        ergebnis = db.execute(abfrage).fetchall()
        if ergebnis == erwartet:
            print("BESTANDEN:", ergebnis)
            print("Begründung:", erklaerung)
        else:
            print("NOCH NICHT BESTANDEN")
            print("Dein Ergebnis:", ergebnis)
            print("Erwartet:", erwartet)
            print("Hinweis:", erklaerung)
    except sqlite3.Error as fehler:
        print("SQL-Fehler:", fehler)
        print("Hinweis:", erklaerung)

db.close()

Wichtig: Die Aufgaben B und C sind zunächst absichtlich unvollständig. Das Programm selbst ist ausführbar und meldet entsprechend, welche Tests Du noch lösen musst. Die Ergebnistabellen sind für das Training fest vorgegeben.


Gestufte Hilfen für das Labor

Aufgabe Hilfe 1: Denkimpuls Hilfe 2: SQL-Struktur Hilfe 3: Rechenweg
A – Basis Was wird gezählt? GROUP BY warengruppe Stück mit SUM(menge) addieren
B – Anwendung Welche Angaben ergeben den Umsatz? JOIN, SUM, GROUP BY Menge mal Preis in Cent, anschließend durch 100.0 teilen
C – Transfer Auf wie viele unterschiedliche Aufträge bezieht sich der Umsatz? COUNT(DISTINCT auftrag_id) Umsatz der Gruppe geteilt durch ihre Anzahl beteiligter Aufträge

Arbeitsregel: Nutze zunächst Hilfe 1. Wenn Du nicht weiterkommst, verwende Hilfe 2 und anschließend Hilfe 3.


Interaktive Aufgaben


Quiz: Teste Dein Wissen

Was kennzeichnet einen Primärschlüssel? (Er identifiziert jeden Datensatz der Tabelle eindeutig) (!Er speichert immer den Gesamtumsatz) (!Er verbindet automatisch alle Datenbanken) (!Er enthält ausschließlich Preise)




Welche SQL-Funktion addiert numerische Werte? (SUM) (!COUNT) (!MIN) (!DISTINCT)




Wie viele Verkaufspositionen enthält der Ausbildungsfall? (8) (!5) (!15) (!4)




Wie werden Daten nach einer gemeinsamen Warengruppe zusammengefasst? (Mit GROUP BY) (!Mit ORDER BY allein) (!Mit DELETE) (!Mit INSERT)




Wie hoch ist der Nettoumsatz der Warengruppe Schutz? (160 Euro) (!120 Euro) (!280 Euro) (!40 Euro)




Welche Bezugsgröße benötigst Du für den durchschnittlichen Umsatz je Auftrag insgesamt? (Die Anzahl unterschiedlicher Aufträge) (!Die Anzahl der Warengruppen) (!Die Anzahl der Artikelarten) (!Die Anzahl der Datenbankspalten)




Warum darfst Du die Auftragszahlen der beiden Warengruppen nicht einfach addieren? (Ein Auftrag kann Artikel aus beiden Warengruppen enthalten) (!Jeder Auftrag gehört immer nur zu einer Warengruppe) (!SQL kann keine Aufträge zählen) (!Die Preise werden in Cent gespeichert)




Welche SQL-Klausel filtert Gruppen anhand einer berechneten Summe? (HAVING) (!WHERE allein) (!JOIN) (!FROM)




Was zählt COUNT mit einer bestimmten Spalte als Argument? (Die Werte dieser Spalte, die nicht NULL sind) (!Nur doppelt vorkommende Werte) (!Immer sämtliche Zeilen unabhängig vom Spalteninhalt) (!Ausschließlich die größten Werte)




Wie hoch ist der durchschnittliche Nettoumsatz je Auftrag des Gesamtbetriebs? (56 Euro) (!35 Euro) (!40 Euro) (!18 Euro)





Memory

Ordne die Begriffe ihren passenden Erklärungen zu.

Primärschlüssel Eindeutige Kennung eines Datensatzes
Fremdschlüssel Verweis auf einen Schlüssel in einer anderen Tabelle
Aggregation Rechnerische Zusammenfassung mehrerer Werte
GROUP BY Zusammenfassung nach einem gemeinsamen Merkmal
SUM Addition numerischer Werte
Bezugsgröße Grundlage, auf die sich eine Kennzahl bezieht
HAVING Filter für bereits gebildete Gruppen





Drag and Drop

Ordne die SQL-Begriffe ihren Funktionen zu.

Ordne die richtigen Begriffe zu. Bedeutung
COUNT Datensätze zählen
AVG Arithmetischen Mittelwert berechnen
JOIN Zusammengehörige Tabellenzeilen verknüpfen
WHERE Zeilen vor der Gruppierung filtern
GROUP BY Zeilen nach einem Merkmal gruppieren
HAVING Gruppen anhand einer Bedingung filtern





Kreuzworträtsel

AGGREGATION Wie heißt die rechnerische Zusammenfassung mehrerer Datenwerte?
GRUPPIERUNG Wie nennt man die Zusammenfassung von Datensätzen anhand gemeinsamer Merkmale?
AUFTRAG Welche betriebliche Einheit kann mehrere Verkaufspositionen enthalten?
UMSATZ Welche Kennzahl beschreibt den Wert der Verkäufe?
MITTELWERT Wie heißt ein rechnerischer Durchschnitt?
FREMDSCHLUESSEL Welcher Schlüssel verweist auf eine andere Tabelle? Schreibe Umlaute als ae, oe oder ue und ß als ss.





LearningApps

Hinweis: Der Suchrahmen kann externe Lernangebote anzeigen. Verwende für SQL-Versuche ausschließlich das lokale Labor. Übertrage keine betrieblichen oder personenbezogenen Daten an externe Dienste.


Lückentext

Vervollständige die Aussagen zu Datenbanken, Aggregation und Bezugsgrößen.
Eine relationale Datenbank verwaltet Informationen in

.
Ein Datensatz wird eindeutig durch einen

identifiziert.
Ein Verweis auf eine andere Tabelle heißt

.
Das Zusammenfassen mehrerer Werte wird als

bezeichnet.
Die SQL-Funktion zum Addieren numerischer Werte heißt

.
Mit der SQL-Funktion

kannst Du Datensätze zählen.
Der arithmetische Durchschnitt wird mit der Funktion

berechnet.
Mit

fasst Du Tabellenzeilen nach gemeinsamen Merkmalen zusammen.
Eine Verbindung zwischen zwei Tabellen kannst Du mit

herstellen.
Ein Filter vor der Gruppierung wird mit

formuliert.
Ein Filter für berechnete Gruppenergebnisse verwendet

.
Die fachliche Grundlage einer Kennzahl nennt man

.
Die Anzahl der Verkaufspositionen beträgt im Beispiel

.
Die Anzahl der verkauften Stück beträgt

.
Der Nettoumsatz des Gesamtbetriebs beträgt

Euro.
Die Anzahl unterschiedlicher Aufträge beträgt

.
Der Nettoumsatz der Warengruppe Schutz beträgt

Euro.
Der Nettoumsatz der Warengruppe Zubehör beträgt

Euro.
Der durchschnittliche Nettoumsatz je Auftrag insgesamt beträgt

Euro.




Offene Aufgaben

Bearbeite die Aufgaben möglichst mit dem fiktiven Nordstern-Datenmodell. Halte Deine SQL-Abfragen, Ergebnisse und Erklärungen fest.


Leicht – Basisaufgaben

  1. Datenmodell: Zeichne zwei Tabellen für Artikel und Verkaufspositionen. Markiere Primär- und Fremdschlüssel.
  2. SQL: Berechne den Positionsumsatz des ersten Datensatzes und erkläre Deinen Rechenweg.
  3. Aggregation: Ermittle die Gesamtstückzahl und die Anzahl der Verkaufspositionen. Vergleiche beide Werte.
  4. Datenvisualisierung: Gestalte ein einfaches Balkendiagramm mit den Stückzahlen der beiden Warengruppen.


Standard – Anwendungsaufgaben

  1. GROUP BY: Schreibe eine SQL-Abfrage, die die verkaufte Menge pro Warengruppe berechnet.
  2. Umsatz: Entwickle eine SQL-Abfrage für den Nettoumsatz pro Warengruppe und überprüfe sie im lokalen Labor.
  3. HAVING: Erstelle eine Liste aller Aufträge mit mindestens 60 € Nettoumsatz und erkläre die Filterung.
  4. Kennzahl: Erstelle ein kleines Dashboard mit Gesamtumsatz, Auftragszahl und durchschnittlichem Umsatz je Auftrag.


Schwer – Transferaufgaben

  1. Bezugsgröße: Untersuche, weshalb der Umsatz je Position und der Umsatz je Auftrag unterschiedliche Werte liefern. Formuliere passende betriebliche Fragestellungen.
  2. Datenqualität: Ergänze im lokalen Modell einen neuen Artikel ohne Verkaufsposition. Untersuche, warum ein INNER JOIN diesen Artikel in einer Verkaufsauswertung nicht anzeigt, und entwickle eine Lösung mit LEFT JOIN.
  3. Datenanalyse: Prüfe, warum die Summe der unterschiedlichen Auftragszahlen pro Warengruppe nicht der Anzahl unterschiedlicher Aufträge im Gesamtbetrieb entspricht.
  4. Betriebliche Entscheidung: Verfasse einen kurzen Bericht für die Ausbilderin. Empfiehl eine Maßnahme auf Grundlage der Kennzahlen und erläutere, welche zusätzlichen Daten für eine belastbare Entscheidung fehlen.




Text bearbeiten Bild einfügen Video einbetten Interaktive Aufgaben erstellen



Lösungen und begründetes Feedback


Basis: Stückzahl je Warengruppe

Erwartete Ergebnisse: Schutz 8 Stück, Zubehör 7 Stück.

Begründung: Die verkauften Mengen müssen addiert werden. COUNT(*) liefert dagegen nur die Zahl der Verkaufspositionen.


Anwendung: Nettoumsatz je Warengruppe

Eine mögliche Lösung für SQL_B:

SELECT
    a.warengruppe,
    SUM(p.menge * p.einzelpreis_cent) / 100.0
        AS umsatz_eur
FROM position AS p
JOIN artikel AS a
    ON a.artikel_id = p.artikel_id
GROUP BY a.warengruppe
ORDER BY a.warengruppe;

Erwartete Ergebnisse: Schutz 160 €, Zubehör 120 €.

Begründung: Der Umsatz einer Verkaufsposition ergibt sich aus Menge mal Nettoeinzelpreis. Erst danach werden die Positionsumsätze innerhalb der Warengruppe addiert.


Transfer: Umsatz je beteiligtem Auftrag

Eine mögliche Lösung für SQL_C:

SELECT
    a.warengruppe,
    ROUND(
        SUM(p.menge * p.einzelpreis_cent)
        / (100.0 * COUNT(DISTINCT p.auftrag_id)),
        2
    ) AS euro_je_auftrag
FROM position AS p
JOIN artikel AS a
    ON a.artikel_id = p.artikel_id
GROUP BY a.warengruppe
ORDER BY a.warengruppe;

Erwartete Ergebnisse: Schutz 40 €, Zubehör 30 €.

Begründung: Jeder Auftrag wird innerhalb der jeweiligen Warengruppe nur einmal gezählt. Die Kennzahl misst den Umsatz dieser Gruppe pro Auftrag, der mindestens eine Position dieser Gruppe enthält.

Grenze der Kennzahl: Ein Auftrag, der mehrere Warengruppen enthält, geht in jede betroffene Gruppe ein. Deshalb sind die gruppierten Auftragszahlen nicht additiv.


Zusatztest: Welche Bezugsgröße passt?

Situation: Die Geschäftsleitung möchte wissen, wie viel Umsatz durchschnittlich mit einer verkauften Einheit erzielt wird.

Richtige Rechnung: 280 € / 15 Stück = rund 18,67 € je Stück.

Nicht passend: 280 € / 5 Aufträge = 56 € je Auftrag.

Feedback: Beide Rechnungen sind korrekt. Nur die erste beantwortet jedoch die gestellte Frage nach einer verkauften Einheit.


Lernkontrolle

Bearbeite diese Aufgaben ohne direkte Übernahme der Musterlösungen.

  1. SQL-Abfrage: Ein Betrieb verkauft viele Einheiten je Auftragsposition. Erkläre anhand eines selbst erfundenen Beispiels, warum COUNT(*) keine korrekte Stückzahl ergibt.
  2. Datenmodellierung: Ein Unternehmen möchte auch Aufträge ohne Positionen auswerten. Begründe, weshalb dafür eine eigene Auftragstabelle sinnvoll ist, und skizziere die Tabellenbeziehungen.
  3. Kennzahl: Ein Dashboard zeigt nur einen durchschnittlichen Umsatzwert. Beschreibe, welche Angaben Du zusätzlich benötigst, damit die Kennzahl fachlich eindeutig ist.
  4. Datenqualität: Erkläre, wie doppelt gespeicherte Verkaufspositionen eine Umsatzkennzahl verfälschen können. Entwickle einen geeigneten Plausibilitätstest.
  5. Aggregation: Zwei Filialen erzielen denselben Umsatz, verkaufen jedoch unterschiedlich viele Stück. Interpretiere die Unterschiede des Umsatzes je Stück.
  6. Transfer: Eine Geschäftsleitung will aus den Warengruppenumsätzen auf den Gewinn schließen. Begründe, warum die vorhandenen Daten dafür nicht ausreichen.
  7. SQL: Entwickle eine zusätzliche Auswertung nach Aufträgen oder Artikeln und erkläre, welchen betrieblichen Nutzen sie hat.




Lernnachweis

Für einen erfolgreichen Lernnachweis erstellst Du einen kurzen, nachvollziehbaren Ausbildungsbericht oder ein digitales Portfolio.

Dein Lernnachweis enthält:

  1. Datenmodell: Darstellung der Tabellen, ihrer Schlüssel und Beziehungen.
  2. SQL-Abfragen: Mindestens drei funktionierende Abfragen mit Aggregation und Gruppierung.
  3. Bezugsgrößen: Begründete Auswahl der passenden Nenner für mindestens zwei Kennzahlen.
  4. Ergebniskontrolle: Vergleich Deiner Resultate mit den bekannten Beispieldaten.
  5. Visualisierung: Mindestens ein selbst gestaltetes Diagramm mit Achsen- oder Einheitenerklärung.
  6. Transfer: Bewertung einer betrieblichen Entscheidung anhand der berechneten Kennzahlen.
  7. Reflexion: Beschreibung eines möglichen Auswertungsfehlers und einer geeigneten Gegenmaßnahme.

Bewertungskriterien: Fachliche Richtigkeit, ausführbare SQL-Abfragen, nachvollziehbare Rechenwege, passende Bezugsgrößen, verständliche Darstellung und begründete Interpretation.

Sicherheitsnachweis: Bestätige, dass Du nur lokale beziehungsweise ausdrücklich freigegebene Testdaten und Testumgebungen verwendet hast.




OERs zum Thema


Wikipedia: SQL


Weitere fachliche Quellen

  1. SQLite: SELECT – Offizielle Dokumentation zu GROUP BY, HAVING und der Auswertung von SELECT-Abfragen.
  2. SQLite: Built-in Aggregate Functions – Offizielle Dokumentation zu SUM, COUNT, AVG, MIN und MAX.
  3. SQLite: Foreign Key Support – Dokumentation der Fremdschlüssel und ihrer Aktivierung.
  4. Python-Dokumentation: sqlite3 – Lokale SQLite-Datenbanken einschließlich Datenbanken im Arbeitsspeicher.
  5. Relationale Datenbank – Grundlagen relationaler Datenmodelle.
  6. Aggregatfunktion – Grundlagen der Datenaggregation.


Mediennachweise und Nutzungsrechte

Die folgenden Wikimedia-Commons-Dateien wurden anhand ihrer Beschreibungs- und Lizenzseiten ausgewählt. Die Abbildungen zeigen allgemeine Fachkonzepte, nicht die fiktiven Nordstern-Daten.

  1. Sql data base with logo.svg – alaa kaddour, CC BY-SA 4.0, unverändert eingebunden.
  2. Grundbegriffe relationaler Datenbanken.svg – Pawiki, gemeinfrei.
  3. Entity-Relationship-Modell.svg – Fleshgrinder, gemeinfrei.
  4. Bar chart.svg – Cuvwb, CC BY-SA 4.0, unverändert eingebunden.
  5. Piechart.svg – Schutz, gemeinfrei.
  6. Group By und Having – InformatikVideos, YouTube.
  7. GROUP BY und HAVING – Patrick Boekhoven, YouTube.

Rechtehinweis: Die Commons-Dateien besitzen die jeweils angegebenen freien Lizenzen oder Gemeinfreiheitskennzeichnungen. Für YouTube-Videos wird damit keine freie Nachnutzungslizenz behauptet; sie werden lediglich als externe Lernmedien eingebunden. Bei externen Medien können Verbindungsdaten an Drittanbieter übertragen werden. Für praktische SQL-Tests ist ausschließlich das lokale Labor vorgesehen.


Verknüpfte Lernbereiche


aiMOOC-Projekte



Schulfach+




aiMOOCs



aiMOOC Projekte









MOOCwiki · Deutsch

Nach dem Lernen ist vor dem Lernen

Entdecke direkt den nächsten Lernkurs. Weitere Inhalte erscheinen, wenn Du weiter nach unten scrollst.

Zur MOOCwiki-Hauptseite

Mediathek

Inhalte werden geladen ...

Mediathek wird aus dem Wiki geladen ...