Kategorien:

Aggregationsfunktionen (Boolean), Fensterfunktionen, Funktionen für bedingte Ausdrücke

BOOLXOR_AGG

Gibt TRUE zurück, wenn genau ein boolescher Datensatz in der Gruppe TRUE ergibt.

Wenn alle Datensätze in der Gruppe NULL sind oder die Gruppe leer ist, gibt die Funktion NULL zurück.

Siehe auch:

BOOLXOR, BOOLAND_AGG, BOOLOR_AGG

Syntax

Aggregatfunktion

BOOLXOR_AGG( <expr> )
Copy

Fensterfunktionen

BOOLXOR_AGG( <expr> ) OVER ( [ PARTITION BY <partition_expr> ] )
Copy

Argumente

expr

Der Eingabeausdruck muss ein Ausdruck sein, der in einen booleschen Wert ausgewertet oder in einen booleschen Wert umgewandelt werden kann.

partition_expr

Diese Spalte oder dieser Ausdruck gibt an, wie die Eingabe in Partitionen (Unterfenster) unterteilt wird.

Rückgabewerte

Der Datentyp des zurückgegebenen Werts ist BOOLEAN.

Nutzungshinweise

  • Numerische Werte werden in TRUE konvertiert, wenn sie nicht Null sind.

  • Werte vom Typ Zeichen/Text werden nicht unterstützt, da sie nicht in Boolesche Werte konvertiert werden können.

  • Bei Verwendung als Fensterfunktion:

    • Diese Funktion unterstützt nicht:

      • ORDER BY-Unterklausel in der OVER-Klausel

      • Fensterrahmen

Beispiele

Das folgende Beispiel zeigt, dass boolxor_agg den Wert „true“ zurückgibt, wenn genau einer der Eingabewerte „true“ ist.

Erstellen und laden Sie die Tabelle:

create or replace table test_boolean_agg(
    id integer,
    c1 boolean, 
    c2 boolean,
    c3 boolean,
    c4 boolean
    );

insert into test_boolean_agg (id, c1, c2, c3, c4) values 
    (1, true, true,  true,  false),
    (2, true, false, false, false),
    (3, true, true,  false, false),
    (4, true, false, false, false);
Copy

Zeigen Sie die Daten an:

select * from test_boolean_agg;
+----+------+-------+-------+-------+
| ID | C1   | C2    | C3    | C4    |
|----+------+-------+-------+-------|
|  1 | True | True  | True  | False |
|  2 | True | False | False | False |
|  3 | True | True  | False | False |
|  4 | True | False | False | False |
+----+------+-------+-------+-------+
Copy

Fragen Sie die Daten ab:

select boolxor_agg(c1), boolxor_agg(c2), boolxor_agg(c3), boolxor_agg(c4)
    from test_boolean_agg;
+-----------------+-----------------+-----------------+-----------------+
| BOOLXOR_AGG(C1) | BOOLXOR_AGG(C2) | BOOLXOR_AGG(C3) | BOOLXOR_AGG(C4) |
|-----------------+-----------------+-----------------+-----------------|
| False           | False           | True            | False           |
+-----------------+-----------------+-----------------+-----------------+
Copy

Fensterfunktionen

Dieses Beispiel ähnelt dem vorherigen Beispiel, zeigt jedoch die Verwendung als Fensterfunktion, wobei die Eingabezeilen in zwei Partitionen aufgeteilt sind (eine für IDs größer als 0 und eine für IDs kleiner oder gleich0). Zusätzliche Daten wurden der Tabelle hinzugefügt.

Fügen Sie der Tabelle Zeilen hinzu:

insert into test_boolean_agg (id, c1, c2, c3, c4) values
    (-4, false, false, false, true),
    (-3, false, true,  true,  true),
    (-2, false, false, true,  true),
    (-1, false, true,  true,  true);
Copy

Zeigen Sie die Daten an:

select * 
    from test_boolean_agg
    order by id;
+----+-------+-------+-------+-------+
| ID | C1    | C2    | C3    | C4    |
|----+-------+-------+-------+-------|
| -4 | False | False | False | True  |
| -3 | False | True  | True  | True  |
| -2 | False | False | True  | True  |
| -1 | False | True  | True  | True  |
|  1 | True  | True  | True  | False |
|  2 | True  | False | False | False |
|  3 | True  | True  | False | False |
|  4 | True  | False | False | False |
+----+-------+-------+-------+-------+
Copy

Fragen Sie die Daten ab:

select 
      id, 
      boolxor_agg(c1) OVER (PARTITION BY (id > 0)),
      boolxor_agg(c2) OVER (PARTITION BY (id > 0)),
      boolxor_agg(c3) OVER (PARTITION BY (id > 0)),
      boolxor_agg(c4) OVER (PARTITION BY (id > 0))
    from test_boolean_agg
    order by id;
+----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------+
| ID | BOOLXOR_AGG(C1) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C2) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C3) OVER (PARTITION BY (ID > 0)) | BOOLXOR_AGG(C4) OVER (PARTITION BY (ID > 0)) |
|----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------|
| -4 | False                                        | False                                        | False                                        | False                                        |
| -3 | False                                        | False                                        | False                                        | False                                        |
| -2 | False                                        | False                                        | False                                        | False                                        |
| -1 | False                                        | False                                        | False                                        | False                                        |
|  1 | False                                        | False                                        | True                                         | False                                        |
|  2 | False                                        | False                                        | True                                         | False                                        |
|  3 | False                                        | False                                        | True                                         | False                                        |
|  4 | False                                        | False                                        | True                                         | False                                        |
+----+----------------------------------------------+----------------------------------------------+----------------------------------------------+----------------------------------------------+
Copy

Fehlerbeispiel

Wenn dieser Funktion Zeichenfolgen übergeben werden, die nicht in Boolesche Werte konvertiert werden können, gibt die Funktion einen Fehler aus:

select boolxor_agg('invalid type');

100037 (22018): Boolean value 'invalid_type' is not recognized
Copy