Kategorien:

Aggregatfunktionen (Allgemein)

MIN_BY / MAX_BY

Sucht die Zeilen, die den Minimum- oder Maximumwert einer Spalte enthalten, und gibt den Wert einer anderen Spalte in dieser Zeile zurück.

Wenn eine Tabelle beispielsweise die Spalten employee_id und salary enthält, gibt MIN_BY(employee_id, salary) den Wert der Spalte employee_id für die Zeile zurück, die den niedrigsten Wert in der Spalte salary hat.

Wenn mehrere Zeilen den angegebenen Minimum- oder Maximumwert enthalten, ist die Funktion nicht deterministisch.

Um Werte für mehrere Zeilen zurückzugeben, geben Sie das optionale Argument maximum_number_of_values_to_return an. Mit diesem zusätzlichen Argument:

  • Die Funktion gibt ein ARRAY zurück, das die Werte einer Spalte für die Zeilen mit den niedrigsten oder höchsten Werten der angegebenen Spalte enthält.

  • Die Werte in ARRAY werden nach den entsprechenden Werten in der Spalte sortiert, die den Minimum- oder Maximumwert enthält.

  • Wenn mehrere Zeilen diese niedrigsten oder höchsten Werte enthalten, ist die Funktion nicht deterministisch.

Beispiel: MIN_BY(employee_id, salary, 5) gibt ein ARRAY der Werte der Spalte employee_id für die fünf Zeilen zurück, die die niedrigsten Werte der Spalte salary enthalten. Die IDs in ARRAY werden nach den entsprechenden Werten der Spalte salary sortiert.

Siehe auch:

MIN / MAX

Syntax

MIN_BY( <col_to_return>, <col_containing_mininum> [ , <maximum_number_of_values_to_return> ] )
Copy
MAX_BY( <col_to_return>, <col_containing_maximum> [ , <maximum_number_of_values_to_return> ] )
Copy

Argumente

Erforderlich:

col_to_return

Spalte, die den zurückzugebenden Wert enthält.

col_containing_mininum, . col_containing_maximum

Spalte, die den Minimum- oder Maximumwert enthält.

Optional:

maximum_number_of_values_to_return

Konstante Ganzzahl (Integer), die die maximale Anzahl der zurückzugebenden Werte angibt. Sie müssen eine positive Zahl angeben. Die maximale Anzahl, die Sie angeben können, ist 1000.

Rückgabewerte

  • Wenn maximum_number_of_values_to_return nicht angegeben wird, gibt die Funktion einen Wert desselben Typs wie col_to_return zurück.

  • Wenn maximum_number_of_values_to_return angegeben wird, gibt die Funktion ein ARRAY zurück, das Werte desselben Typs wie col_to_return enthält. Die Werte in ARRAY sind nach ihren entsprechenden Werten für col_containing_mininum / col_containing_maximum sortiert.

    So gibt MIN_BY(employee_id, salary, 5) beispielsweise die IDs der Mitarbeiter mit den fünf niedrigsten Gehältern zurück, sortiert nach salary (in absteigender Reihenfolge).

Nutzungshinweise

  • Die Funktion ignoriert NULL-Werte in col_containing_mininum und col_containing_maximum.

  • Wenn in col_containing_mininum oder col_containing_maximum alle Werte NULL sind, gibt die Funktion NULL zurück (unabhängig davon, ob das optionale Argument maximum_number_of_values_to_return angegeben ist).

Beispiele

In den folgenden Beispielen wird die Verwendung der Funktionen MIN_BY und MAX_BY gezeigt.

Um diese Beispiele auszuführen, führen Sie die folgenden Anweisungen aus, um die Tabelle und die Daten für die Beispiele einzurichten:

CREATE OR REPLACE TABLE employees(employee_id NUMBER, department_id NUMBER, salary NUMBER);

INSERT INTO employees VALUES
  (1001, 10, 10000),
  (1020, 10, 9000),
  (1030, 10, 8000),
  (900, 20, 15000),
  (2000, 20, NULL),
  (2010, 20, 15000);
Copy

Führen Sie die folgende Anweisung aus, um den Inhalt dieser Tabelle anzuzeigen:

SELECT * FROM employees;

+-------------+---------------+--------+
| EMPLOYEE_ID | DEPARTMENT_ID | SALARY |
|-------------+---------------+--------|
|        1001 |            10 |  10000 |
|        1020 |            10 |   9000 |
|        1030 |            10 |   8000 |
|         900 |            20 |  15000 |
|        2000 |            20 |   NULL |
|        2010 |            20 |  15000 |
+-------------+---------------+--------+
Copy

Das folgende Beispiel gibt die IDs der Mitarbeiter mit den höchsten und niedrigsten Gehältern zurück:

SELECT MIN_BY(employee_id, salary), MAX_BY(employee_id, salary) from employees;

+-----------------------------+-----------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY) | MAX_BY(EMPLOYEE_ID, SALARY) |
|-----------------------------+-----------------------------|
|                        1030 |                         900 |
+-----------------------------+-----------------------------+
Copy

Beachten Sie Folgendes:

  • Da mehr als eine Zeile den Höchstwert für die Spalte salary enthält, ist die Funktion nicht deterministisch und könnte bei späteren Ausführungen die Mitarbeiter-ID einer anderen Zeile zurückgeben.

  • Die Funktion ignoriert den Wert NULL in der Spalte salary bei der Ermittlung der Zeilen mit den Minimum- und Maximumwerten.

Das folgende Beispiel gibt ein ARRAY zurück, das die IDs der Mitarbeiter mit den drei höchsten und niedrigsten Gehältern enthält:

SELECT MIN_BY(employee_id, salary, 3), MAX_BY(employee_id, salary, 3) from employees;

+--------------------------------+--------------------------------+
| MIN_BY(EMPLOYEE_ID, SALARY, 3) | MAX_BY(EMPLOYEE_ID, SALARY, 3) |
|--------------------------------+--------------------------------|
| [                              | [                              |
|   1030,                        |   900,                         |
|   1020,                        |   2010,                        |
|   1001                         |   1001                         |
| ]                              | ]                              |
+--------------------------------+--------------------------------+
Copy

Wie im Beispiel gezeigt, werden die Werte in der Spalte ARRAY nach ihren entsprechenden Werten in der Spalte salary sortiert:

  • MIN_BY gibt die IDs der Mitarbeiter sortiert nach deren Gehalt in aufsteigender Reihenfolge zurück.

  • MAX_BY gibt die IDs der Mitarbeiter sortiert nach deren Gehalt in absteigender Reihenfolge zurück.

Wenn mehr als eine dieser Zeilen denselben Wert in der Spalte salary enthält, ist die Reihenfolge der zurückgegebenen Werte für dieses Gehalt nicht deterministisch.