23rd Jun 2022 9 Leseminuten SQL MIN und MAX Funktionen in 6 Beispielen erklärt Dorota Wdzięczna Numerische Funktionen Aggregatfunktionen Inhaltsverzeichnis Was ist die MIN()-Funktion in SQL? Was ist die Funktion MAX() in SQL? Die Beispieldaten Beispiele für MIN() und MAX() Anwendungsfälle 1. Verwendung von MIN() oder MAX() als Einzelspalte 2. Verwendung von MIN() und MAX() mit anderen Spalten 3. Verwendung von MIN() und MAX() in der gleichen Abfrage 4. Verwendung von MIN() oder MAX() in der HAVING-Klausel 5. Verwendung von MIN() oder MAX() in einer einfachen Fensterfunktion 6. Verwendung von MIN/MAX in einer Funktion mit unterteiltem Fenster Was wir über die Funktionen MIN() und MAX() von SQL gelernt haben 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. Tags: Numerische Funktionen Aggregatfunktionen