faecher:informatik:oberstufe:datenbanken:sql_gruppierungen:lsg:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:datenbanken:sql_gruppierungen:lsg:start [20.10.2020 14:04] sbelfaecher:informatik:oberstufe:datenbanken:sql_gruppierungen:lsg:start [18.03.2025 08:40] (aktuell) Frank Schiebel
Zeile 4: Zeile 4:
  
 ^Funktion ^ Bedeutung ^ Wert in Gruppe ''APreis=9.99'' ^ ^Funktion ^ Bedeutung ^ Wert in Gruppe ''APreis=9.99'' ^
-| AVG     | Durchschnittlicher Bestand in der den Preiskategorien   | AVG(ABestand)=87 |+| AVG     | Durchschnittlicher Bestand in der den Preiskategorien   | AVG(ABestand)=80 |
 | COUNT     | COUNT(ABestand)= | | COUNT     | COUNT(ABestand)= |
 | MAX       | MAX(ABestand)= | | MAX       | MAX(ABestand)= |
Zeile 17: Zeile 17:
  
 <code sql> <code sql>
-SELECT APreis, SUM(ABestand) AS Bestandsssumme +SELECT APreis, SUM(ABestand) AS Bestandssumme 
 FROM `artikel`  FROM `artikel` 
 WHERE APreis <= 10 WHERE APreis <= 10
-ORDER BY APreis,SUM(ABestand)+GROUP BY Apreis 
 +ORDER BY APreis,Bestandssumme 
 </code> </code>
  
 (ii) Gruppiert wird nach APreis und nach ABestand, in der ersten Spalte kann man sich zusätzlich mit ''COUNT(*)'' noch ausgeben lassen, wieviele Datensätze in dieser Gruppe zusammengefasst werden. (ii) Gruppiert wird nach APreis und nach ABestand, in der ersten Spalte kann man sich zusätzlich mit ''COUNT(*)'' noch ausgeben lassen, wieviele Datensätze in dieser Gruppe zusammengefasst werden.
 +
 <code sql> <code sql>
 SELECT COUNT(*), APreis, ABestand SELECT COUNT(*), APreis, ABestand
Zeile 32: Zeile 34:
 (iii) Die Abfrage ermittelt die Zahl der Datensätze, die einen identischen Bestand aufweisen. Z.B. "80 - 3", es gibt 3 Datensätze, deren Bestand mit 80 Exemplaren vermerkt ist. Siehe auch die Bedeutung von COUNT(*) bei der Lösung zu Aufgabe 2. (iii) Die Abfrage ermittelt die Zahl der Datensätze, die einen identischen Bestand aufweisen. Z.B. "80 - 3", es gibt 3 Datensätze, deren Bestand mit 80 Exemplaren vermerkt ist. Siehe auch die Bedeutung von COUNT(*) bei der Lösung zu Aufgabe 2.
  
-(v) Liegt die Filterbedingung, wie in Aufgabe (2) als Tabellenattribut vor, kann man sowohl vor der Gruppierung mit WHERE als auch nach der Gruppierung mit HAVING filtern:+(v) Liegt die Filterbedingung, wie in Aufgabe (2) als Tabellenattribut vor, kann man sowohl vor der Gruppierung mit ''WHERE'' als auch nach der Gruppierung mit ''HAVING'' filtern:
  
 <code sql> <code sql>
-SELECT APreis, SUM(ABestand) AS Bestandsssumme +SELECT APreis, SUM(ABestand) AS Bestandssumme 
 FROM `artikel`  FROM `artikel` 
 WHERE APreis <= 10 WHERE APreis <= 10
Zeile 42: Zeile 44:
  
 <code sql> <code sql>
-SELECT APreis, SUM( ABestand )  AS Bestandsssumme+SELECT APreis, SUM( ABestand )  AS Bestandssumme
 FROM  `artikel`  FROM  `artikel` 
 GROUP  BY APreis GROUP  BY APreis
Zeile 49: Zeile 51:
 </code> </code>
  
-Enststeht das Attribut der Filterung erst durch due Gruppeirung selbst, kann erst nach der Gruppierung mit HAVING gefiltert werden:+**Allgemein:** Entsteht das Attribut der Filterung erst durch die Gruppierung selbst, kann erst nach der Gruppierung mit ''HAVING'' gefiltert werden:
  
 +Folgendes funktioniert also __nicht__:
 <code sql> <code sql>
 SELECT ABestand, AVG(APreis) AS Mittelpreis SELECT ABestand, AVG(APreis) AS Mittelpreis
Zeile 58: Zeile 61:
 </code> </code>
  
 +Das funktioniert aber:
 <code sql> <code sql>
 SELECT ABestand, AVG(APreis) AS Mittelpreis SELECT ABestand, AVG(APreis) AS Mittelpreis
Zeile 64: Zeile 68:
 HAVING Mittelpreis < 10 HAVING Mittelpreis < 10
 </code> </code>
 +
 +
 +Die Aufgabe (v) lässt sich also nicht mit WHERE lösen, da man dabei immer nur für eine Zeile das Produkt aus Bestand und Preis betrachten kann - man möchte aber für eine ganze Kategorie die Bestanddsumme * Artikelpreis anschauen und danach auch Filtern:
 +
 +<code sql>
 +SELECT APreis, SUM(`ABestand`)*APreis AS Umsatz 
 +FROM artikel 
 +GROUP BY APreis 
 +HAVING Umsatz >= 3000
 +</code>
 +
  • faecher/informatik/oberstufe/datenbanken/sql_gruppierungen/lsg/start.1603202641.txt.gz
  • Zuletzt geändert: 20.10.2020 14:04
  • von sbel