Eindeutige Werte mit DISTINCT
Welche Genres hat der Shop? SELECT genre FROM spiele; ergibt 20 Zeilen, eine für jedes Spiel, und die meisten Genres stehen mehrmals darin. DISTINCT direkt nach SELECT behält jede verschiedene Zeile nur einmal:
SELECT DISTINCT genre
FROM spiele
ORDER BY genre;| genre |
|---|
| Action |
| Adventure |
| Puzzle |
| RPG |
| Rennspiel |
| Simulation |
| Sport |
| Strategie |
Acht Genres statt zwanzig Zeilen. DISTINCT selbst sortiert nichts: Die Genres stehen dank ORDER BY in alphabetischer Reihenfolge, und ohne es könnten sie in beliebiger Reihenfolge kommen. (RPG steht vor Rennspiel, weil Großbuchstaben vor Kleinbuchstaben kommen, wie du am Anfang dieser Lektion gesehen hast.)
Bei mehreren Spalten entfernt DISTINCT nur die Zeilen, die in allen gleich sind. Für welche Preise wurde jedes Spiel verkauft?
SELECT DISTINCT spiel_id, preis
FROM positionen
ORDER BY spiel_id, preis;| spiel_id | preis |
|---|---|
| 1 | 40 |
| 2 | 15 |
| 3 | 20 |
| 4 | 30 |
| 5 | 15 |
| 5 | 25 |
| … | … |
Die meisten Spiele stehen einmal darin, manche zweimal, wie Spiel 5, Shadow Ninja: Es wurde für 25 € verkauft und am Black Friday für 15 €. Es zählt die Kombination der Werte in der Zeile, nicht jede Spalte für sich. NULL zählt auch als Wert: Wenn mehrere Zeilen NULL haben, behält DISTINCT eine davon.
DISTINCT steht einmal, direkt nach SELECT, und gilt für die ganze Zeile. Typischer Fehler: es vor eine der Spalten zu setzen. SELECT spiel_id, DISTINCT preis FROM positionen; endet mit dem Fehler near "DISTINCT": syntax error.
So schreibst du es:
Anweisungen
- 1
Die Abfrage im Editor zeigt die Stadt jedes Kunden, und die Städte wiederholen sich. Ändere sie so, dass jede Stadt nur einmal vorkommt, in alphabetischer Reihenfolge. Die Kunden ohne Stadt ergeben eine weitere Zeile,
NULL:stadt NULL Berlin Dresden Hamburg Leipzig - 2
Zeige darunter die IDs der Kunden, die etwas bestellt haben: die Spalte
kunde_idvonbestellungen, jede ID nur einmal, von der kleinsten. Die Kunden 12 und 14 sind nicht dabei, weil sie nie etwas bestellt haben:kunde_id 1 2 3 4 … - 3
Finde zum Schluss heraus, welche Altersfreigaben jedes Genre hat: Zeige jede Kombination aus
genreundaltersfreigabenur einmal, sortiert nach dem Genre und dann nach der Altersfreigabe:genre altersfreigabe Action 12 Action 16 Action 18 Adventure 7 … …