Bedingte Ausdrücke

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Google Standard-SQL für BigQuery unterstützt bedingte Ausdrücke. Bedingte Ausdrücke erzwingen Einschränkungen für die Auswertungsreihenfolge ihrer Eingaben. Im Wesentlichen werden sie von links nach rechts nach dem Kurzschlussprinzip ausgewertet und zwar nur der gewählte Ausgabewert. Im Gegensatz dazu werden alle Eingaben für reguläre Funktionen vor Aufruf der Funktion ausgewertet. Die Kurzschlussauswertung in bedingten Ausdrücken kann für Fehlerbehandlung oder Leistungsabstimmung genutzt werden.

CASE-Ausdrücke

CASE expr
  WHEN expr_to_match THEN result
  [ ... ]
  [ ELSE else_result ]
  END

Beschreibung

Vergleicht expr mit expr_to_match jeder aufeinanderfolgenden WHEN-Klausel und gibt das erste Ergebnis zurück, wenn dieser Vergleich mit TRUE ausgewertet wird. Die verbleibenden WHEN-Klauseln und else_result werden nicht ausgewertet.

Wird der Vergleich expr = expr_to_match für alle WHEN-Klauseln als FALSE oder NULL ausgewertet, so wird die Bewertung von else_result zurückgegeben, sofern vorhanden. Ist else_result nicht vorhanden, wird NULL zurückgegeben.

Konsistent mit Gleichheitsvergleichen an anderer Stelle. Sind expr und expr_to_match NULL, dann wird expr = expr_to_match als NULL ausgewertet, was else_result zurückgibt. Wenn eine CASE-Anweisung einen NULL-Wert unterscheiden muss, sollten Sie die alternative CASE-Syntax verwenden.

expr und expr_to_match können ein beliebiger Typ sein. Sie müssen implizit zu einem gemeinsamen Supertyp erzwungen werden können. Gleichheitsvergleiche werden auf erzwungene Werte angewendet. Es gibt möglicherweise mehrere result-Typen. result- und else_result-Ausdrücke müssen zu einem gemeinsamen Supertyp gezwungen werden können.

Dieser Ausdruck unterstützt die Angabe der Sortierung.

Rückgabedatentyp

Supertyp von result[, ...] und else_result.

Beispiel

WITH Numbers AS (
  SELECT 90 as A, 2 as B UNION ALL
  SELECT 50, 8 UNION ALL
  SELECT 60, 6 UNION ALL
  SELECT 50, 10
)
SELECT
  A,
  B,
  CASE A
    WHEN 90 THEN 'red'
    WHEN 50 THEN 'blue'
    ELSE 'green'
    END
    AS result
FROM Numbers

+------------------+
| A  | B  | result |
+------------------+
| 90 | 2  | red    |
| 50 | 8  | blue   |
| 60 | 6  | green  |
| 50 | 10 | blue   |
+------------------+

CASE

CASE
  WHEN condition THEN result
  [ ... ]
  [ ELSE else_result ]
  END

Beschreibung

Wertet die Bedingung aufeinanderfolgender WHEN-Klauseln aus und gibt das erste Ergebnis zurück, in dem die Bedingung als TRUE ausgewertet wird. Alle verbleibenden WHEN-Klauseln und else_result werden nicht ausgewertet.

Ergeben alle Bedingungen FALSE oder NULL, wird die Bewertung von else_result zurückgegeben, sofern vorhanden. Ist else_result nicht vorhanden, wird NULL zurückgegeben.

Weitere Regeln zur Auswertung von Werten finden Sie in der dreiwertigen Logiktabelle unter Logische Operatoren.

condition muss ein boolescher Ausdruck sein. Es gibt möglicherweise mehrere result-Typen. result- und else_result-Ausdrücke müssen implizit zu einem gemeinsamen Supertyp gezwungen werden können.

Dieser Ausdruck unterstützt die Angabe der Sortierung.

Rückgabedatentyp

Supertyp von result[, ...] und else_result.

Beispiel

WITH Numbers AS (
  SELECT 90 as A, 2 as B UNION ALL
  SELECT 50, 6 UNION ALL
  SELECT 20, 10
)
SELECT
  A,
  B,
  CASE
    WHEN A > 60 THEN 'red'
    WHEN B = 6 THEN 'blue'
    ELSE 'green'
    END
    AS result
FROM Numbers

+------------------+
| A  | B  | result |
+------------------+
| 90 | 2  | red    |
| 50 | 6  | blue   |
| 20 | 10 | green  |
+------------------+

COALESCE

COALESCE(expr[, ...])

Beschreibung

Gibt den Wert des ersten Nicht-NULL-Ausdrucks zurück. Die übrigen Ausdrücke werden nicht ausgewertet. Ein Eingabeausdruck kann einen beliebigen Typ haben. Es können mehrere Arten von Eingabeausdrücken vorhanden sein. Alle Eingabeausdrücke müssen implizit zu einem gemeinsamen Supertypen gezwungen werden können.

Rückgabedatentyp

Supertyp von expr[, ...].

Beispiele

SELECT COALESCE('A', 'B', 'C') as result

+--------+
| result |
+--------+
| A      |
+--------+
SELECT COALESCE(NULL, 'B', 'C') as result

+--------+
| result |
+--------+
| B      |
+--------+

IF

IF(expr, true_result, else_result)

Beschreibung

Wird expr als TRUE ausgewertet, wird true_result zurückgegeben. Andernfalls wird die Bewertung für else_result zurückgegeben. else_result wird nicht ausgewertet, wenn expr als TRUE ausgewertet wird. true_result wird nicht ausgewertet, wenn expr als FALSE oder NULL ausgewertet wird.

expr muss ein boolescher Ausdruck sein. true_result und else_result müssen zu einem gemeinsamen Supertyp gezwungen werden können.

Rückgabedatentyp

Supertyp von true_result und else_result.

Beispiel

WITH Numbers AS (
  SELECT 10 as A, 20 as B UNION ALL
  SELECT 50, 30 UNION ALL
  SELECT 60, 60
)
SELECT
  A,
  B,
  IF(A < B, 'true', 'false') AS result
FROM Numbers

+------------------+
| A  | B  | result |
+------------------+
| 10 | 20 | true   |
| 50 | 30 | false  |
| 60 | 60 | false  |
+------------------+

WENNNULL

IFNULL(expr, null_result)

Beschreibung

Wenn expr als NULL ausgewertet wird, wird null_result zurückgegeben. Andernfalls wird expr zurückgegeben. Wird expr nicht als NULL ausgewertet, wird null_result nicht ausgewertet.

expr und null_result können einen beliebigen Typ haben und müssen implizit zu einem gemeinsamen Supertyp gezwungen werden können. Synonym für COALESCE(expr, null_result).

Rückgabedatentyp

Supertyp von expr oder null_result.

Beispiele

SELECT IFNULL(NULL, 0) as result

+--------+
| result |
+--------+
| 0      |
+--------+
SELECT IFNULL(10, 0) as result

+--------+
| result |
+--------+
| 10     |
+--------+

NULLIF

NULLIF(expr, expr_to_match)

Beschreibung

Gibt NULL zurück, wenn expr = expr_to_match als TRUE ausgewertet wird. Andernfalls wird expr zurückgegeben.

expr und expr_to_match müssen implizit zu einem gemeinsamen Supertyp gezwungen werden können und müssen übereinstimmen.

Dieser Ausdruck unterstützt die Angabe der Sortierung.

Rückgabedatentyp

Supertyp von expr und expr_to_match.

Beispiel

SELECT NULLIF(0, 0) as result

+--------+
| result |
+--------+
| NULL   |
+--------+
SELECT NULLIF(10, 0) as result

+--------+
| result |
+--------+
| 10     |
+--------+