Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung |
faecher:informatik:oberstufe:datenbanken:sql_gruppierungen:start [18.01.2024 07:57] – [Aufgaben] Frank Schiebel | faecher:informatik:oberstufe:datenbanken:sql_gruppierungen:start [24.11.2024 16:50] (aktuell) – Frank Schiebel |
---|
| |
---- | ---- |
| <tabs> |
| * [[#dbmariadb01|MariaDB/phpMyAdmin]] |
| * [[#dbsqlite01|SQLite]] |
| <pane id="dbmariadb01"> |
| Importiere die Tabellen der Datenbank {{ :faecher:informatik:oberstufe:datenbanken:sql_abfrage:webshop.sql.zip |}} in deine Datenbank. |
| </pane> |
| <pane id="dbsqlite01"> |
| Lade die {{ :faecher:informatik:oberstufe:datenbanken:sql_gruppierungen:webshop.sqlite.db.zip |gezippte Webshop-Datenbank}} auf deinen Rechner herunter und entpacke sie. Öffne anschließend die Datei ''webshop.sqlite.db'' mit dem SQLite Browser. |
| |
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. | </pane> |
| </tabs> |
| |
| Löse die folgenden Aufgaben, verwende, wo nötig und sinnvoll Aliase. |
| |
---- | ---- |
FROM `adressen` | FROM `adressen` |
GROUP BY `Kundenstatus`;''++ | 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`; ''++ | - Gruppiere die Adressliste nach Kunden-Kategorien und Bonuspunkte (In einer Gruppe sollen also alle Datensätze sein, die dieselbe Kundenkategorie und dieselbe Bonuspunktzahl haben). Gib 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.++ | - 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 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;'' ++ |