Zurück zur Artikelliste Artikel
9 Leseminuten

SQL MIN und MAX Funktionen in 6 Beispielen erklärt

Was sind die SQL-Funktionen MIN() und MAX()? Wann sollten Sie sie als Aggregatfunktionen verwenden, und wann sollten Sie sie mit Fensterfunktionen verwenden? Wir erklären es anhand praktischer Beispiele.

Die Aggregatfunktionen MIN() und MAX() sind aus SQL nicht mehr wegzudenken. Sie sind für viele Datenexperten sehr nützlich, da sie es uns ermöglichen, eine Vielzahl von Geschäftsproblemen zu lösen. In diesem Artikel erkläre ich, was die beiden Funktionen bewirken, und gehe auf verschiedene Anwendungsfälle ein.

Lassen Sie uns beginnen.

Was ist die MIN()-Funktion in SQL?

Der SQL-Standard wird von den meisten relationalen Datenbank-Engines unterstützt und enthält mehrere Aggregatfunktionen. Diese Aggregatfunktionen führen Berechnungen mit numerischen Daten durch. In SQL Aggregatfunktionen für einsteiger werden alle diese Funktionen ausführlich besprochen; dieser Artikel konzentriert sich nur auf zwei dieser Funktionen: MIN() und MAX().

Lassen Sie uns zunächst über die Funktion MIN() sprechen. Sie gibt den kleinsten Wert in einer Gruppe von Werten zurück. Die Werte können aus einer numerischen Spalte stammen oder das Ergebnis eines Ausdrucks sein, der einen numerischen Wert zurückgibt. (Hinweis: Die Spalte kann aus einer Tabelle oder einem View stammen.) Es handelt sich um eine skalare Funktion, die einen numerischen Wert zurückgibt.

Die Syntax der Funktion MIN() ist unten dargestellt:

MIN(column_or_expression)

Wie Sie sehen, benötigt diese Funktion ein Argument - eine Spalte oder einen Ausdruck mit numerischen Werten. Es ist wichtig, dass die Werte numerisch sind, da die Funktion den Mindestwert unter ihnen findet. Zum Beispiel, aus dieser Menge von Werten ...

4, 5, 8, 2, 14

... MIN() gibt 2 zurück.

Was ist die Funktion MAX() in SQL?

Wie MIN() ist auch MAX() eine Aggregatfunktion, die einen numerischen Wert aus einer Menge zurückgibt. Der Unterschied besteht darin, dass sie den größten (maximalen) Wert zurückgibt. Die Werte können aus einer Spalte stammen oder das Ergebnis eines Ausdrucks sein, der einen oder mehrere numerische Werte zurückgibt. Es handelt sich um eine skalare Funktion, die einen Wert zurückgibt.

Hier ist die Syntax der Funktion MAX():

MAX(column_or_expression)

Aus dieser Menge von Werten ...

4, 5, 8, 2, 14 

... MAX() gibt 14 zurück.

Die Beispieldaten

Bevor wir mit der Analyse der Anwendungsfälle MIN() und MAX() beginnen, schauen wir uns die Daten an, die wir in der Tabelle verwenden werden cosmetics:

idnamecategorydelivered_yearprice
1shampoohair202011
2night creamface202012
3cleanserface20205
4brushhair20203
5mascaraeye20218
6eyebroweye202115
7conditionerhair202121
8sprayhair202113
9eyelinereye202120
10tonicface202021
11face maskface202110
12eye creameye202122
13hair maskhair20203

Diese Tabelle speichert Informationen über kosmetische Produkte in drei Kategorien (die Spalte category): Haare, Gesicht und Augen. Die Namen der Produkte stehen in der Spalte Name. Die letzten beiden Spalten enthalten Daten darüber, wann das Produkt geliefert wurde (delivered_year) und seine price. In der Spalte delivered_year stehen nur zwei Jahre (2020 und 2021).

Wenn Sie Hilfe zu den SQL-Anweisungen und -Funktionen benötigen, die wir in diesem Artikel verwenden, lesen Sie das SQL für Anfänger Cheat Sheet.

Beispiele für MIN() und MAX() Anwendungsfälle

1. Verwendung von MIN() oder MAX() als Einzelspalte

Aggregatfunktionen wie MIN() können als einzelne Spalte in der Abfrage SELECT verwendet werden. Zum Beispiel:

SELECT MIN(price) FROM cosmetics;

Hier ist das Ergebnis:

min
3

Nach dem Schlüsselwort SELECT folgen MIN() und der Name der Spalte (in diesem Fall price). Danach folgt das Schlüsselwort FROM und der Tabellenname (cosmetics). Das Ergebnis ist der kleinste Wert in der Spalte price, der 3 beträgt.

Sie können MAX() auf genau die gleiche Weise verwenden, um den höchsten Produktpreis zu finden:

SELECT MAX(price) FROM cosmetics;

Und hier ist das Ergebnis:

max
22

Der Höchstpreis in der Tabelle cosmetics ist 22 (der Preis für die Augencreme).

Der Artikel How to Find Minimum Values in Columns gibt Ihnen weitere Beispiele, wie Sie den Mindestwert finden können.

2. Verwendung von MIN() und MAX() mit anderen Spalten

Eine fortgeschrittenere Verwendung der Funktionen MIN() oder MAX() besteht darin, sie auf Gruppen von Zeilen anzuwenden. Hier ist eine weitere Abfrage:

SELECT category,
  MAX(price) AS max_price
FROM cosmetics
GROUP BY category;

Sie gibt die Daten zurück:

categorymax_price
hair21
face21
eye22

Zuerst kommt das Schlüsselwort SELECT mit dem Spaltennamen (category), dann die Funktion MAX() mit der Spalte price als Argument. Dann haben wir max_price, den Alias der neuen Spalte, die durch MAX() erstellt wurde.

Es folgen das Schlüsselwort FROM und der Tabellenname. Am Ende steht die Klausel GROUP BY mit der Spalte category. Damit werden die Gruppen festgelegt (d. h. die Produkte werden nach Kategorien gruppiert). Für jede Gruppe erhalten wir den größten Wert - in diesem Fall den höchsten Preis der Produkte in dieser Kategorie. In der Kategorie "Augen" liegt der höchste Preis bei 22 $, in den Kategorien "Gesicht" und "Haare" bei 21 $.

Weitere Beispiele für diese Funktion finden Sie im Artikel Höchstwerte in Zeilen ermitteln.

3. Verwendung von MIN() und MAX() in der gleichen Abfrage

Sie können sowohl die Funktionen MIN als auch MAX in einer SELECT verwenden. Wenn Sie nur diese Funktionen ohne irgendwelche Spalten verwenden, brauchen Sie keine GROUP BY Klausel.

Im Folgenden finden Sie eine Abfrage, die beide Funktionen implementiert:

 SELECT MIN(price) AS min_price,
  MAX(price) AS max_price
FROM cosmetics;

Diese Abfrage gibt die Daten zurück:

min_pricemax_price
322

In der SELECT haben wir die Funktion MIN() mit dem Spaltenargument price, gefolgt von MAX() mit demselben Argument und ihren jeweiligen Aliasen. Dies gibt den Mindestpreis ($3) und den Höchstpreis ($22) für alle Produkte in der Tabelle zurück.

Natürlich können Sie das Gleiche tun, indem Sie den Mindest- und Höchstpreis für jede Kategorie berechnen. Hier müssen Sie jedoch GROUP BY verwenden:

SELECT category,
  MIN(price) AS min_price,
  MAX(price) AS max_price
FROM cosmetics
GROUP BY category;

Hier ist die Ergebnismenge:

categorymin_pricemax_price
hair321
face521
eye822

In diesem Fall liegt der Mindestpreis in der Kategorie "Haare" bei 3 $ und der Höchstpreis bei 21 $, während in der Kategorie "Augen" der niedrigste Wert 8 $ und der höchste 22 $ beträgt.

Weitere Informationen über die Ermittlung von Mindest- und Höchstwerten finden Sie in den Artikeln How to Find the Minimum Value of a Column in SQL und How to Find the Maximum Value of a Numeric Column in SQL.

4. Verwendung von MIN() oder MAX() in der HAVING-Klausel

Eine weitere Möglichkeit, MIN() oder MAX() zu verwenden, besteht darin, Zeilen nach dem von dieser Funktion zurückgegebenen Wert zu filtern - d. h. in der Klausel HAVING.

Die folgende Abfrage implementiert MIN() in HAVING:

SELECT category,
  MAX(price) AS max_price
FROM cosmetics
GROUP BY category
HAVING MIN(price)>4;

Die Ergebnismenge:

categorymax_price
face21
eye22

In SELECT haben wir die Spalte category. Es folgt die Funktion MAX() mit price als Argument. Für jede Kategorie wird der Höchstpreis der zu dieser Kategorie gehörenden Produkte berechnet. Nach FROM cosmetics folgt die Klausel GROUP BY mit der Spalte category.

Am Ende der Abfrage steht die HAVING Klausel mit der Funktion MIN(). Damit wird der niedrigste Preis unter den Produkten in jeder Kategorie gefunden; wenn dieser Preis unter 4 liegt, wird er nicht in die Ergebnisse aufgenommen. Da der Mindestpreis in der Kategorie "Haare" 3 $ beträgt, wurde sie nicht in der Ergebnismenge angezeigt.

Beachten Sie, dass die Verwendung einer der beiden Funktionen in HAVING nicht voraussetzt, dass sie (oder eine andere Aggregatfunktion) in SELECT verwendet wird.

5. Verwendung von MIN() oder MAX() in einer einfachen Fensterfunktion

Die am weitesten fortgeschrittene Verwendung von MIN() oder MAX() ist in einer Fensterfunktion. Wenn Sie mit Window-Funktionen nicht vertraut sind, lesen Sie den Artikel Beispiel für SQL Fensterfunktionen mit erklärrungen.

Hier ist eine einfache Fensterfunktion, die die Funktion MIN() verwendet:

SELECT name, price, category, delivered_year,
  MIN(price) OVER (ORDER BY category DESC) AS min_price
FROM cosmetics;

Das erste, was Ihnen auffällt, ist die Liste der Spalten SELECT: name, price, category, delivered_year. Als Nächstes folgt die Aggregatfunktion MIN(price), die den niedrigsten Wert in der Spalte price ermittelt. OVER macht diese Funktion zu einer Fensterfunktion; sie definiert das Fenster oder die Menge der Zeilen innerhalb der Abfrageergebnismenge. So können wir einen Gesamtwert für jede Zeile im Fenster berechnen. Hier ist OVER mit der Kategorie ORDER BY DESC gepaart (d. h. in absteigender Reihenfolge); der Mindestpreis ist also immer 3 $, da der niedrigste Preis in der Kategorie "Haare" 3 $ beträgt, was niedriger ist als der Mindestpreis der nächsten Kategorie von 5 $.

Hier ist das Ergebnis:

namepricecategorydelivered_yearmin_price
hair mask3hair20203
brush3hair20203
conditioner21hair20213
spray13hair20213
shampoo11hair20203
night cream12face20203
cleanser5face20203
tonic21face20203
face mask10face20213
mascara8eye20213
eye cream22eye20213
eyeliner20eye20213
eyebrow15eye20213

6. Verwendung von MIN/MAX in einer Funktion mit unterteiltem Fenster

Als Nächstes wollen wir MIN() oder MAX() in einer Fensterfunktion mit der Klausel PARTITION BY verwenden. (Wenn Sie eine Auffrischung zu PARTITION BY benötigen, werfen Sie einen Blick auf das SQL Fensterfunktionen Cheat Sheet.) Dies ist die Abfrage:

SELECT name, price, category, delivered_year,
  MIN(price) OVER (PARTITION BY delivered_year
           	ORDER BY category DESC)
  AS min_price
FROM cosmetics;

Diese Abfrage berechnet den Mindestpreis für jede Partition auf der Grundlage der Spalte delivered_year und sortiert die Zeilen nach der Kategorie.

Sie gibt die folgende Ergebnismenge zurück:

namepricecategorydelivered_yearmin_price
shampoo11hair20203
brush3hair20203
hair mask3hair20203
tonic21face20203
night cream12face20203
cleanser5face20203
spray13hair202113
conditioner21hair202113
face mask10face202110
eyeliner20eye20218
mascara8eye20218
eyebrow15eye20218
eye cream22eye20218

Diese Ergebnisse enthalten die Liste der Kosmetika, einschließlich ihres Namens, Preises, ihrer Kategorie und des Lieferjahres. Jede Zeile enthält außerdem den Mindestpreis für das betreffende Lieferjahr (das die Partition ist). In jeder Partition sind die Zeilen in absteigender Reihenfolge nach Kategorie sortiert.

In diesem Fall enthält die Klausel OVER die Klauseln ORDER BY und PARTITION BY. PARTITION BY delivered_year bedeutet, dass der Mindestpreis für jedes Jahr separat berechnet wird. Die Datensätze in jeder Partition (das Jahr, in dem die Produkte geliefert wurden) werden nach Kategorie in absteigender Reihenfolge sortiert (ORDER BY Kategorie DESC).

Was wir über die Funktionen MIN() und MAX() von SQL gelernt haben

Die SQL-Aggregatfunktionen MIN() und MAX() sind sehr beliebt. In diesem Artikel habe ich Ihnen erklärt, wie Sie sie in verschiedenen Fällen verwenden können. Der Hauptunterschied zwischen den beiden Funktionen besteht darin, dass MIN() den Mindestwert in einer Gruppe von Werten ermittelt, während MAX() den Höchstwert zurückgibt.

Da Sie nun wissen, wie Sie MIN() und MAX() verwenden können, sind Sie nun bereit:

  • Die größten/kleinsten Werte in allen gegebenen Zeilen oder Gruppen von Zeilen zu finden.
  • Minimal- und Maximalwerte mit anderen Zeilen zu vergleichen.
  • Diese Funktionen auf Partitionen und auf einfache Fensterfunktionen anwenden.

Weitere Informationen über die Unterschiede zwischen Aggregatwerten und Fensterfunktionen finden Sie in unserem Artikel SQL Fensterfunktionen vs. SQL-Aggregatfunktionen: Gemeinsamkeiten und Unterschiede.

Wenn Sie Anfänger sind und Ihre SQL-Kenntnisse erweitern möchten, empfehle ich Ihnen den LearnSQL.de's SQL für Anfänger Kurs. Wenn Sie jedoch bereits mit den Grundlagen von SQL vertraut sind, sollten Sie unseren Fensterfunktionen Kurs besuchen, um Ihre Kenntnisse zu vertiefen.