faecher:informatik:oberstufe:datenbanken:sql_gruppierungen: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:start [05.11.2020 12:13] – [Aufgaben] sbelfaecher:informatik:oberstufe:datenbanken:sql_gruppierungen:start [18.01.2024 08:57] (aktuell) – [Aufgaben] Frank Schiebel
Zeile 6: Zeile 6:
 Datensätze, die in einer Spalte oder mehreren Spalten die gleichen Werte aufweisen, können mithilfe des GROUP BY-Zusatzes in Gruppen zusammengefasst werden. Gruppierungen machen vor allem dann Sinn, wenn innerhalb der Gruppen mit den Spaltenwerten gerechnet wird, z.B. wenn die Gesamtzahl aller Artikel einer bestimmten Preiskategorie ermittelt werden soll. Datensätze, die in einer Spalte oder mehreren Spalten die gleichen Werte aufweisen, können mithilfe des GROUP BY-Zusatzes in Gruppen zusammengefasst werden. Gruppierungen machen vor allem dann Sinn, wenn innerhalb der Gruppen mit den Spaltenwerten gerechnet wird, z.B. wenn die Gesamtzahl aller Artikel einer bestimmten Preiskategorie ermittelt werden soll.
  
-^ Ohne Gruppierung                                                  ^ Mit Gruppierung                                                                                     ^ +^ Ohne Gruppierung                                                         ^ Mit Gruppierung                                                                                     ^ 
-| ''SELECT *''\\ ''FROM adressen''\\ ''ORDER BY Kundenstatus ASC''  | ''SELECT *''\\ ''FROM artikel''\\ **''GROUP by APreis''**\\ ''ORDER BY APreis ASC''                 | +| ''SELECT *''\\ ''FROM artikel''\\ ''ORDER BY APreis ASC''                | ''SELECT *''\\ ''FROM artikel''\\ **''GROUP by APreis''**\\ ''ORDER BY APreis ASC''                 | 
-| {{ .:auswahl_001.png }}                                           | {{ .:auswahl_006.png }}                                                                             +| {{ .:auswahl_001.png }}  | {{ .:auswahl_006.png |}}                            
-                                                                  | ''SELECT APreis,SUM(ABestand)''\\ ''FROM artikel''\\ ''GROUP BY APreis''\\ ''ORDER BY APreis ASC'' +                                                                         | ''SELECT APreis,SUM(ABestand)''\\ ''FROM artikel''\\ ''GROUP BY APreis''\\ ''ORDER BY APreis ASC'' 
-                                                                  | {{ .:auswahl_005.png }}                                                                             |+                                                                         | {{ .:auswahl_005.png }}                             |
  
 Alle Artikel mit dem Preis von 1,00 Euro werden durch die Gruppierung auf einen Datensatz "projiziert" Alle Artikel mit dem Preis von 1,00 Euro werden durch die Gruppierung auf einen Datensatz "projiziert"
Zeile 54: Zeile 54:
 ===== Aufgaben ===== ===== Aufgaben =====
  
-Löse die folgenden Aufgaben im SQL-Abfragefenster von phpMyAdmin auf der Datenbank webshop und speichere deine Lösungen in einer Textdatei oder deinem Info-Heft.+Löse die folgenden Aufgaben im SQL-Abfragefenster von phpMyAdmin und speichere deine Lösungen in einer Textdatei oder deinem Info-Heft.
 ---- ----
 {{:aufgabe.png?nolink  |}} {{:aufgabe.png?nolink  |}}
Zeile 60: Zeile 60:
  
 Was erfragen die beiden SQL Abfragen im Abschnitt zum Thema Aliase? Welche Rückschlüsse lässt das auf die Struktur der Tabellen zu? Was erfragen die beiden SQL Abfragen im Abschnitt zum Thema Aliase? Welche Rückschlüsse lässt das auf die Struktur der Tabellen zu?
 +
 +---- 
 +
 +Importiere die Tabellen der Datenbank {{ :faecher:informatik:oberstufe:datenbanken:sql_abfrage:webshop.sql.zip |}} in deine Datenbank, um die folgenden Aufgaben zu lösen. Verwende, wo nötig Aliase.
  
 ---- ----
Zeile 65: Zeile 69:
 === (A2) === === (A2) ===
  
-Neben der Summenfunktion gibt es weitere Berechnungsfunktionen für zahlenwertige Spalten. Vervollständige die folgende Tabelle unter Verwendung folgender SQL-Abfrage:+Neben der Summenfunktion gibt es weitere **Berechnungsfunktionen** (Aggregationsfunktionen) für zahlenwertige Spalten. Vervollständige die folgende Tabelle unter Verwendung folgender SQL-Abfrage:
 <code sql> <code sql>
-  SELECT *,FUNKTION(ABestand)+  SELECT APreis, FUNKTION(ABestand)
   FROM artikel   FROM artikel
   GROUP BY APreis   GROUP BY APreis
   ORDER BY APreis   ORDER BY APreis
 </code> </code>
-Dabei ist ''FUNKTION'' nacheinander durch ''AVG'', ''COUNT'', ''MAX'', ''MIN'' und ''SUM'' zu ersetzen. 
  
 +Dabei ist ''FUNKTION'' nacheinander durch ''AVG'', ''COUNT'', ''MAX'', ''MIN'' und ''SUM'' zu ersetzen. 
  
-^Funktion ^ Bedeutung ^ Wert in Gruppe ''APreis=9.99''+  * Notiere die allgemeine Bedeutung der Aggregationsfunktion. 
-| AVG       | AVG(ABestand)= | +  * Halte die Ausgabe für die Preisgruppe ''APreis=9.99'' fest. 
-| COUNT     | COUNT(ABestand)= | +  * Überlege dir jeweils, was die Ausgabe bedeutet und formuliere einen Satz der, die Bedeutung für die Preisgruppe ''APreis=9.99'' beschreibt.  
-| MAX       | MAX(ABestand)= | + 
-| MIN       | MIN(ABestand)= | + 
-| SUM       | SUM(ABestand)= |+^ Funktion  ^ Bedeutung  ^ Wert in Gruppe ''APreis=9.99''  
 +| AVG                  | AVG(ABestand)=                  
 +| COUNT                | COUNT(ABestand)=                
 +| MAX                  | MAX(ABestand)=                  
 +| MIN                  | MIN(ABestand)=                  
 +| SUM                  | SUM(ABestand)=                  |
  
  
Zeile 87: Zeile 96:
 === (A3) === === (A3) ===
  
-Arbeite wider mit unserer Adressdatenbank, verwende, wo nötig Aliase. 
  
-  - Gib die Zahl der Personen an, die in den verschiedenen Kundenkategorien sind.  +(i) Gib den jeweiligen Gesamtbestand der Artikel in den verschiedenen Preiskategorien unter 10,00EUR an.
-  - Welche durchschnittliche Bonuspunktzahl haben die Mitglieder der verschiedenen Kunden-Kategorien?  +
-  - Gruppiere die Adressliste nach Kunden-Kategorien und Bonuspunkte (In einer Gruppe sollen also alle Datensätze seindie dieselbe Kundenkategorie und dieselbe Bonunspunktzahl haben). Gibt auf diese weise die Zahl der Personen in der jeweiligen Gruoppe, die Kategorie und die Zahl der Bonuspunkte aus.+
  
 (ii) Gib Gruppen mit gleichem Bestand und Preis zurück. (ii) Gib Gruppen mit gleichem Bestand und Preis zurück.
Zeile 109: Zeile 115:
  
 ([[.lsg:start|Lösungen]]) ([[.lsg:start|Lösungen]])
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A4) ===
 +
 +Arbeite nun wieder mit unserer Adressdatenbank, verwende, wo nötig Aliase.
 +
 +  - Gib die Zahl der Personen an, die in den verschiedenen Kundenkategorien (Gold, Silber, Bronze oder kein Status) sind. \\ ++ Lösung | ''SELECT Kundenstatus, COUNT(`Kundenstatus`) 
 +FROM `adressen`
 +GROUP BY `Kundenstatus`;'' ++
 +  - Welche durchschnittliche Bonuspunktzahl haben die Mitglieder der verschiedenen Kunden-Kategorien? \\ ++ Lösung | ''SELECT Kundenstatus, COUNT(`Kundenstatus`), AVG(`Bonuspunkte`) AS Durchschnittspunkte
 +FROM `adressen`
 +GROUP BY `Kundenstatus`;''++
 +  - Gruppiere die Adressliste nach Kunden-Kategorien und Bonuspunkte (In einer Gruppe sollen also alle Datensätze sein, die dieselbe Kundenkategorie und dieselbe Bonuspunktzahl haben). Gibt auf diese Weise die Zahl der Personen in der jeweiligen Gruppe, die Kategorie und die Zahl der Bonuspunkte aus. \\ ++ Lösung | '' SELECT`Kundenstatus`, `Bonuspunkte`, COUNT(*) AS Kundenzahl FROM `adressen` GROUP BY `Kundenstatus`, `Bonuspunkte`; ''++
 +  - Gib bei der vorherigen Abfrage nur die Gruppen aus, die mehr als ein Mitglied haben. Geht das mit einem ''WHERE'' Statement? \\ ++ Lösung | ''SELECT`Kundenstatus`, `Bonuspunkte`, COUNT(*) AS Kundenzahl FROM `adressen` GROUP BY `Kundenstatus`, `Bonuspunkte` HAVING Kundenzahl > 1;'' \\ Das geht nicht mit ''WHERE'', da die Kundenzahl in den Gruppen erst nach der Gruppierung bekannt ist.++ 
 +  - Erzeuge eine Liste mit der Zahl der Gold-Kunden mit mehr als 1000 Bonuspunkten gruppiert nach Stadt, absteigend sortiert nach der Zahl der Bonuspunkte. \\ ++ Lösung | ''SELECT `Stadt`, `Kundenstatus`, `Bonuspunkte`, COUNT(*) AS Kundenzahl FROM `adressen` WHERE `Kundenstatus` = "Gold" AND `Bonuspunkte` > 1000 GROUP BY `Stadt` ORDER BY `Bonuspunkte` DESC;'' ++
 +  - Erzeuge eine Liste mit der Zahl aller Kunden, die keine leere Kundenkategorie haben mit mehr als 1000 Bonuspunkten gruppiert nach Stadt und Kategorie, absteigend sortiert nach der Zahl der gesamten Bonuspunkte für die jeweilige Gruppe. \\ ++ Lösung | ''SELECT `Stadt`, `Kundenstatus`, `Bonuspunkte`, COUNT(*) AS Kundenzahl, SUM(`Bonuspunkte`) AS Punktesumme FROM `adressen` WHERE `Kundenstatus` != "" AND `Bonuspunkte`> 1000 GROUP BY `Stadt`, `Kundenstatus` ORDER BY Punktesumme DESC; ''++ 
 +
 +==== Material ====
 +
 +
 +{{simplefilelist>:faecher:informatik:oberstufe:datenbanken:sql_gruppierungen:*}}
  • faecher/informatik/oberstufe/datenbanken/sql_gruppierungen/start.1604574827.txt.gz
  • Zuletzt geändert: 05.11.2020 12:13
  • von sbel