Schwedisch begonnen, die anderen erweitert
This commit is contained in:
@@ -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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user