Schwedisch begonnen, die anderen erweitert

This commit is contained in:
2026-09-20 11:11:11 +02:00
parent 9610638462
commit 19b153dd54
4 changed files with 466 additions and 7 deletions
+202 -5
View File
@@ -595,7 +595,9 @@ ROUND(number, decimal_places)
Zum Beispiel einfaches Runden auf ganze Zahlen:
```sql
SELECT ROUND(3.7);-- Returns 4.0SELECT ROUND(3.3);-- Returns 3.0SELECT ROUND(3.5);  -- Returns 4.0 (rounds up from .5)
SELECT ROUND(3.7); -- Returns 4.0
SELECT ROUND(3.3); -- Returns 3.0
SELECT ROUND(3.5); -- Returns 4.0 (rounds up from .5)
```
**Hinweis:** Die `ROUND()`-Funktion in SQLite gibt immer einen Fließkommawert (REAL) zurück. Aus diesem Grund enthalten die obigen Ergebnisse ein Komma bzw. einen Dezimalpunkt (z. B. 4.0 statt 4).
@@ -620,8 +622,10 @@ SELECT ROUND(3.14159, 2);-- Returns 3.14SELECT ROUND(3.14159, 1);-- Retur
Prüfen, ob das General Log aktiviert ist:
```sql
SHOW VARIABLES LIKE 'general_log';
SHOW VARIABLES LIKE 'log_output'
```
Oder beide Werte gemeinsam anzeigen:
@@ -1032,9 +1036,10 @@ Benenne die Spalte als `worst_criminals`.
| 19 | Kshitija Ladislav | cSA0hA | Caerleon | 2 |
| 20 | Ha-Eun Tatiana | YNYhHV | Kara's Vale | 4 |
select name as worst_criminals from police_report where (report like '%g%' or report like '%b%' or report is null ) and map in ('Caerleon', 'Dewsbury', 'Kirkwall', 'Findochty') order by severe_score desc limit 5
##############################################################
```sql
select name as worst_criminals from police_report where (report like '%g%' or report like '%b%' or report is null ) and map in ('Caerleon', 'Dewsbury', 'Kirkwall', 'Findochty') order by severe_score desc limit 5
```
## Recap - Bar Beverage Container
@@ -1135,7 +1140,10 @@ a*a*a
-- Potenz von 3
```
`select id , (3*id*id*id*id + 5*id*id*id + 0.9*id*id + 2.2 * id +1 )as quartic from items`
```sql
select id , (3*id*id*id*id + 5*id*id*id + 0.9*id*id + 2.2 * id +1 )as quartic from items
```
### Datumsangaben behandeln – Teil 1
@@ -1194,4 +1202,193 @@ SELECT JULIANDAY('2023-02-20 12:00:00')
Dies gibt `2459996.0` Tage zurück
Julianische Tage beginnen mittags, daher steht `.0` für Mittag, wie im Unterrichtsbeispiel gezeigt, in dem `'2023-02-20 12:00:00'` `2459996.0` zurückgibt. Daher steht `.5` für Mitternacht (auf halbem Weg durch den `JULIANDAY`), nicht für Mittag.
Julianische Tage beginnen mittags, daher steht `.0` für Mittag, wie im Unterrichtsbeispiel gezeigt, in dem `'2023-02-20 12:00:00'` `2459996.0` zurückgibt. Daher steht `.5` für Mitternacht (auf halbem Weg durch den `JULIANDAY`), nicht für Mittag.
#### Challenge
verfügbare Tabellen und Spalten:
- `events`**:** `id`**,** `start`**,** `end`
| id | start | end |
| ---- | ----- | ------------------------ |
| 1 | 13 | 2009-01-12T22:00:00.000Z |
| 2 | 14 | 2009-10-11T22:00:00.000Z |
| 3 | 15 | 2009-09-14T21:00:00.000Z |
| 4 | 16 | 2009-02-19T22:00:00.000Z |
| 5 | 17 | 2009-08-07T21:00:00.000Z |
| 6 | 18 | 2010-12-23T22:00:00.000Z |
| 7 | 19 | 2009-07-13T21:00:00.000Z |
| 8 | 20 | 2009-07-25T21:00:00.000Z |
| 9 | 21 | 2008-04-02T21:00:00.000Z |
| 10 | 22 | 2010-01-01T22:00:00.000Z |
Rufe die IDs aller Ereignisse ab, die weniger als drei Tage dauern
```sql
select id from events where (JULIANDAY(end) - JULIANDAY(start)) < 3
```
### Datumsangaben behandeln – Teil 3
SQL bietet mehrere nützliche Funktionen zum Bearbeiten und Formatieren von Datumsangaben. Hier sind einige häufig verwendete Datumsfunktionen:
1. `DATE()` – Wandelt eine Zeichenfolge in ein Datum um
2. `STRFTIME()` – Formatiert Datumsangaben gemäß den angegebenen Parametern
3. `DATE('now')` – Ruft das aktuelle Datum ab:
Zum Beispiel einen String in ein Datum umwandeln:
```sql
SELECT DATE('2023-05-15 13:45:00') -- Gibt zurück: 2023-05-15
SELECT DATE('now') -- Gibt das aktuelle Datum zurück
```
Zum Beispiel Jahr, Monat und Tag aus einem Datum extrahieren:
```sql
-- Jahr abrufen
SELECT STRFTIME('%Y', '2023-05-15')
-- Gibt zurück: 2023
-- Monat abrufen
SELECT STRFTIME('%m', '2023-05-15')
-- Gibt zurück: 05
-- Tag abrufen
SELECT STRFTIME('%d', '2023-05-15')
-- Gibt zurück: 15
-- Kombination aus Jahr und Tag anzeigen (beliebiger Trenner kann verwendet werden)
SELECT STRFTIME('%Y:%d', '2023-05-15')
-- Gibt zurück: 2023:15
-- Stattdessen einen Bindestrich als Trenner verwenden
SELECT STRFTIME('%d-%m-%Y', '2023-05-15')
-- Gibt zurück: 15-05-2023
-- Wochentag abrufen
SELECT STRFTIME('%w', '2023-05-15')
-- Gibt zurück: 1 (Montag; Sonntag ist 0)
```
Häufige Formatbezeichner:
- `%Y`: Jahr (4 Ziffern)
- `%m`: Monat (01–12)
- `%d`: Tag des Monats (01–31)
- `%w`: Wochentag (0–6, Sonntag ist 0)
- `%H`: Stunde (00–23)
- `%M`: Minute (00–59)
- `%S`: Sekunde (00–59)
Du kannst **jedes Trennzeichen** zwischen den Bezeichnern verwenden (z. B. `-`, `:`, `/`). Zum Beispiel kombinieren `STRFTIME('%d-%m-%Y', date)` und `STRFTIME('%d:%m:%Y', date)` beide Tag, Monat und Jahr, lediglich mit unterschiedlichen Trennzeichen.
Du kannst diese Funktionen in Abfragen kombinieren:
```sql
-- Finde alle Datensätze aus dem aktuellen Jahr
SELECT * FROM table1 WHERE STRFTIME('%Y', date_column) = STRFTIME('%Y', 'now')
```
### Datumsangaben behandeln – Teil 3
Verfügbare Tabellen und Spalten:
- `events`**:** `id`**,** `start`**,** `end`
| Id | start | end |
| --- | ---------------------------------- | ---------------------------------- |
| 13 | 2009-01-12T22:00:00.000Z | 2009-01-14T22:00:00.000Z |
| 14 | 2009-10-11T22:00:00.000Z | 2009-10-18T22:00:00.000Z |
| 15 | 2009-09-14T21:00:00.000Z | 2009-09-30T22:00:00.000Z |
| 16 | 2009-02-19T22:00:00.000Z | 2010-02-20T22:00:00.000Z |
| 17 | 2009-08-07T21:00:00.000Z | 2009-08-08T21:00:00.000Z |
| 18 | 2010-12-23T22:00:00.000Z | 2010-12-31T22:00:00.000Z |
| 19 | 2009-07-13T21:00:00.000Z | 2009-07-15T21:00:00.000Z |
| 20 | 2009-07-25T21:00:00.000Z | 2009-07-30T21:00:00.000Z |
| 21 | 2008-04-02T21:00:00.000Z | 2008-04-02T21:00:00.000Z |
| 22 | 2010-01-01T22:00:00.000Z | 2010-01-04T22:00:00.000Z |
| 23 | 2009-08-01T10:00:00.000Z | 2009-08-01T20:00:00.000Z |
| 24 | 2009-08-022009-08-01T03:00:00.000Z | 2009-08-022009-08-01T11:00:00.000Z |
| 25 | 2009-08-10T03:00:00.000Z | 2009-08-12T03:00:00.000Z |
| 26 | 2009-08-23T09:00:00.000Z | 2009-08-25T06:00:00.000Z |
| 27 | 2009-09-01T01:00:00.000Z | 2009-09-12T01:00:00.000Z |
Schreibe eine Abfrage, die Folgendes anzeigt:
- Die Ereignis-ID
- Das Startdatum, formatiert als "DD-MM-YYYY". Nenne diese Spalte `formatted_start`
- Das Enddatum, formatiert als "DD-MM-YYYY". Nenne diese Spalte `formatted_end`
- Die Dauer in Tagen zwischen start und end, auf die nächste ganze Zahl gerundet. Nenne diese Spalte `duration_days`
Filtere nur die Zeilen, in denen das Jahr der Spalte `start` `2009` ist (`STRFTIME()` gibt eine Zeichenfolge und keine Zahl zurück).
Sortiere die Ergebnisse nach der Dauer in Tagen in absteigender Reihenfolge.
Hinweis: Um die Differenz zwischen Datumsangaben zu berechnen, verwende: `JULIANDAY(end) - JULIANDAY(start)` und verwende `ROUND()`, um auf ganze Zahlen zu runden.
#### Lösung
```sql
select id , STRFTIME('%d-%m-%Y', start) as formatted_start, STRFTIME('%d-%m-%Y', end) as formatted_end, ROUND(JULIANDAY(end) - JULIANDAY(start)) AS duration_days from events where STRFTIME('%Y',start) == '2009' order by duration_days desc
```
## Integrierte Aggregatfunktionen Teil 1
SQL verfügt über viele integrierte Funktionen, aber in dieser Lektion behandeln wir die Aggregatfunktionen.
Eine Aggregatfunktion erhält ein Feld als Eingabe und berechnet etwas über dieses Feld. Die häufigsten Aggregatfunktionen sind:
- `MAX` - Gibt den Maximalwert eines Feldes zurück
- `MIN` - Gibt den Minimalwert eines Feldes zurück
- `AVG` - Gibt den Durchschnittswert eines Feldes zurück
- `COUNT` – Gibt die Gesamtzahl der Datensätze zurück
- `SUM` – Gibt die Summe aller Nicht-Null-Werte in einem Feld zurück
Du kannst diese Funktionen in deiner SELECT-Anweisung wie folgt verwenden:
```sql
SELECT MAX(col1), MIN(col2), AVG(col3), …
```
Zum Beispiel, um das höchste Gehalt in einer Mitarbeitertabelle zu finden:
```sql
SELECT MAX(salary) FROM employees
```
Oder um mehrere Aggregatfunktionen gleichzeitig zu erhalten:
```sql
SELECT MAX(salary), MIN(salary), AVG(salary) FROM employees
```
### Challenge
> Verfügbare Tabellen und Spalten:
>
> - `sales`**:** `product_id`**,** `price_per_unit`**,**  `quantity`
Schreibe eine Abfrage, die Folgendes zurückgibt:
- Die Gesamtzahl der Verkaufstransaktionen
- Die durchschnittliche Menge pro Verkauf
- Den maximalen Preis pro Einheit
- Den Gesamtumsatz (Summe aus quantity * price_per_unit)
Dein Ergebnis sollte genau diese Spaltennamen haben:
- `total_transactions`
- `avg_quantity`
- `max_unit_price` 
- `total_revenue`
|product_id|price_per_unit|quantity|
|:---|:---|:---|
|4|19|1|
|5|16|3|
|6|13|2|
|7|21|1|
|8|16|3|
|9|23|5|
|10|27|1|
|11|18|2|
|12|21|3|
|13|22|2|
```sql
select count(product_id) as total_transactions, avg(quantity) as avg_quantity, max(price_per_unit) as max_unit_price, sum(price_per_unit * quantity) as total_revenue from sales
```