# SQL-Editor

Es ist nützlich, wenn Sie mehr Kontrolle möchten, als der visuelle Builder bietet. Sie können Spalten auswählen, Filter hinzufügen und Ergebnisse genau so gruppieren oder sortieren, wie Sie es möchten. Der Editor verwendet die [DuckDB SQL-Syntax](https://duckdb.org/docs/stable/sql/introduction.html).

Um eine Abfrage auszuführen, müssen Sie zuerst einen Datensatz auswählen und Ihre Abfrage immer mit einem `LIMIT` beenden. Die maximale Zeilenzahl für Abfragen ist 1000.

## Den SQL-Editor öffnen

Sie können von jeder Auswertung zum SQL-Modus wechseln:

* Gehen Sie zum **Daten**-Reiter.
* Klicken Sie die **SQL**-Schaltfläche neben **Baukasten**.

Dies öffnet einen Texteditor, in dem Sie Ihre SQL-Abfrage schreiben können.

## Einen Datensatz auswählen

Sie müssen immer definieren, auf welchem Datensatz die Abfrage ausgeführt werden soll.

* Klicken Sie das Menü mit der Bezeichnung **Datensätze**.
* Fügen Sie den Datensatz in Ihren SQL-Code ein.

Beispiel:

```sql
select *
from '{{ds_abc123xy456}}' as "Beispiel-Datensatz"
limit 1000
```

**Wichtig:** Fügen Sie immer `LIMIT` am Ende Ihrer Abfrage hinzu. Die Abfrage wird ohne es nicht ausgeführt. 1000 ist die maximale Anzahl von Zeilen für die Abfrage.

## Eine benutzerdefinierte Abfrage schreiben

Sobald der Datensatz ausgewählt ist, können Sie jedes gültige DuckDB SQL schreiben.

#### Beispiel: Auswählen und zählen

```sql
select abteilung, count(*) as gesamt
from '{{ds_abc123xy456}}'
group by abteilung
order by gesamt desc
limit 10000
```

Dieses Beispiel zählt, wie viele Zeilen für jede Abteilung existieren und sortiert sie von hoch zu niedrig.

## Das Datensatz-Schema erkunden

Unter dem Editor sehen Sie eine Liste der Spalten für den ausgewählten Datensatz. Jede zeigt:

* Den Spaltennamen
* Den Datentyp (wie `VARCHAR`, `DATE`, `DOUBLE`, etc.)

Verwenden Sie diese, um gültige Abfragen zu schreiben, ohne Spaltennamen zu erraten.

Beispieltypen:

| Spaltenname        | Typ     | Bedeutung         |
| ------------------ | ------- | ----------------- |
| Name               | VARCHAR | Textwerte         |
| Startdatum         | DATE    | Datum zum Filtern |
| Alter              | BIGINT  | Ganze Zahl        |
| Vollzeitäquivalent | DOUBLE  | Dezimalzahl       |

## Häufige SQL-Klauseln

Sie können alle Standard-DuckDB-Klauseln verwenden. Hier ist eine Übersicht:

| Klausel    | Was sie tut                                      |
| ---------- | ------------------------------------------------ |
| `select`   | Auswählen, welche Spalten angezeigt werden       |
| `from`     | Den Datensatz definieren                         |
| `where`    | Zeilen filtern (z.B. `where alter > 30`)         |
| `group by` | Daten zusammenfassen (z.B. Summen pro Kategorie) |
| `order by` | Zeilen sortieren (z.B. `order by name asc`)      |
| `limit`    | Immer erforderlich, begrenzt Anzahl der Zeilen   |

## Verfügbare SQL-Funktionen

Für eine vollständige Referenz aller verfügbaren SQL-Funktionen, einschließlich mathematischer Operationen, String-Manipulation, Datumsfunktionen und mehr, siehe die [**SQL-Befehle**](https://docs.polyteia.com/auswertungen/sql-editor/sql-befehle)-Dokumentation.

Diese Referenz umfasst:

* Mathematische Funktionen (ABS, ROUND, SQRT, etc.)
* Aggregatfunktionen (COUNT, SUM, AVG, etc.)
* String-Funktionen (SUBSTR, REPLACE, etc.)
* Datums- und Zeitfunktionen (DATE\_FORMAT, STRPTIME, etc.)
* Array- und räumliche Funktionen
* Alle unterstützten Operatoren und Klauseln

Alle dort aufgelisteten Funktionen wurden getestet und für die Verwendung in der Polyteia-Plattform freigegeben.

## Abfrage-Validierung

Alle SQL-Abfragen werden vor der Ausführung validiert. Das System überprüft Ihre Abfrage, um sicherzustellen, dass sie sicher ist und den Plattformregeln folgt.

Operationen, die Daten ändern, löschen oder schädigen könnten — wie `DROP`, `DELETE`, `UPDATE` oder das Erstellen neuer Tabellen — sind nicht erlaubt. Wenn das System etwas Ungültiges oder Unsicheres erkennt, wird die Abfrage nicht ausgeführt.

Dies stellt sicher, dass nur sichere und schreibgeschützte Operationen im Editor möglich sind.

## Die Abfrage ausführen

Klicken Sie die **Ausführen**-Schaltfläche, um Ihre Abfrage auszuführen. Ergebnisse erscheinen in der Tabelle auf der linken Seite.

Wenn nichts angezeigt wird:

* Überprüfen Sie auf Tippfehler in Spaltennamen.
* Stellen Sie sicher, dass die Datensatz-ID korrekt ist.
* Bestätigen Sie, dass Sie `limit 1000` hinzugefügt haben.

Wenn immer noch leer, könnte Ihre Abfrage basierend auf den Filtern keine Zeilen zurückgeben.

## SQL-Variablen

Möchten Sie Ihre Abfragen flexibel und wiederverwendbar machen? Sie können Variablen mit der `$variablenname`-Syntax hinzufügen:

```sql
SELECT * 
FROM '{{ds_abc123xy456}}'
WHERE abteilung = $abteilung
  AND erstellungsdatum >= $startdatum
LIMIT 1000
```

Variablen erscheinen als interaktive Steuerelemente unter dem SQL-Editor und ermöglichen es Ihnen, verschiedene Werte zu testen, ohne Ihre Abfrage umzuschreiben. Sie sind besonders mächtig, wenn Sie Auswertungen in Berichten verwenden - Variablen werden zu benutzerfreundlichen Filtern.

Für vollständige Details zur Verwendung von Variablen siehe [**SQL-Variablen**](https://docs.polyteia.com/auswertungen/sql-editor/sql-variablen).

## SQL-Vorschau im Baukasten

Wenn Sie mit dem visuellen Baukasten arbeiten, zeigt Ihnen die Plattform automatisch die zugehörige SQL-Abfrage an. So sehen Sie jederzeit, welche Abfrage im Hintergrund erzeugt wird.

* Klicken Sie auf **SQL-Abfrage**, um die Vorschau auf- oder zuzuklappen.
* Sie können die angezeigte SQL-Abfrage in die Zwischenablage kopieren.

{% hint style="info" %}
Die SQL-Vorschau ist praktisch, um SQL zu lernen oder um eine Abfrage aus dem Baukasten als Ausgangspunkt für den SQL-Editor zu verwenden.
{% endhint %}

## Zurück zum visuellen Modus wechseln

Möchten Sie den Builder wieder verwenden?

* Klicken Sie **Baukasten** neben **SQL**.
* Dies setzt Ihre Abfrage zurück und kehrt zur Baukasten-Benutzeroberfläche zurück.

{% hint style="danger" %}
**Hinweis**: Sie verlieren Ihre aktuelle SQL-Abfrage, wenn Sie wechseln.
{% endhint %}
