Database
 sql >> Datenbank >  >> RDS >> Database

SQL MIN() für Anfänger

In SQL das MIN() Funktion ist eine Aggregatfunktion, die den Mindestwert in einem gegebenen Ausdruck zurückgibt.

Nachfolgend finden Sie einige grundlegende Beispiele, um zu demonstrieren, wie es funktioniert.

Beispieltabelle

Angenommen, wir haben die folgende Tabelle:

SELECT * FROM Products;

Ergebnis:

+-------------+------------+---------------------------------+----------------+-----------------------------------------+
| ProductId   | VendorId   | ProductName                     | ProductPrice   | ProductDescription                      |
|-------------+------------+---------------------------------+----------------+-----------------------------------------|
| 1           | 1001       | Left handed screwdriver         | 25.99          | Purple. Includes left handed carry box. |
| 2           | 1001       | Long Weight (blue)              | 14.75          | Includes a long wait.                   |
| 3           | 1001       | Long Weight (green)             | 11.99          | Approximate 30 minute waiting period.   |
| 4           | 1002       | Sledge Hammer                   | 33.49          | Wooden handle. Free wine glasses.       |
| 5           | 1003       | Chainsaw                        | 245.00         | Orange. Includes spare fingers.         |
| 6           | 1003       | Straw Dog Box                   | NULL           | Tied with vines. Very chewable.         |
| 7           | 1004       | Bottomless Coffee Mugs (4 Pack) | 9.99           | Brown ceramic with solid handle.        |
+-------------+------------+---------------------------------+----------------+-----------------------------------------+

Beispiel

Hier ist ein einfaches Beispiel zur Veranschaulichung.

SELECT MIN(ProductPrice)
FROM Products;

Ergebnis:

+--------------------+
| (No column name)   |
|--------------------|
| 9.99               |
+--------------------+

In diesem Fall werden Preisinformationen im ProductPrice gespeichert Spalte, und wir übergeben das als Argument an MIN() Funktion, die dann das Ergebnis berechnet und zurückgibt.

Spaltenaliase verwenden

Sie werden feststellen, dass die vorherigen Ergebnisse keinen Spaltennamen enthalten. Dies ist zu erwarten, da die MIN() Funktion gibt keine Spalten zurück. Sie können ganz einfach einen Spaltennamen angeben, indem Sie einen Alias ​​zuweisen.

SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products;

Ergebnis:

+----------------+
| MinimumPrice   |
|----------------|
| 9.99           |
+----------------+

Gefilterte Ergebnisse

Der MIN() Die Funktion arbeitet mit den von der Abfrage zurückgegebenen Zeilen. Wenn Sie also die Ergebnisse filtern, das Ergebnis von MIN() wird das widerspiegeln.

SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products
WHERE VendorId = 1001;

Ergebnis:

+----------------+
| MinimumPrice   |
|----------------|
| 11.99          |
+----------------+

In diesem Fall ist 11,99 der Mindestpreis aller vom angegebenen Anbieter angebotenen Produkte.

NULL Werte

Der MIN() Funktion ignoriert jeden NULL Werte. In unserer Beispieltabelle oben, Produktnummer 6 hat NULL in seinem ProductPrice Spalte, aber das wurde in unserem MIN() ignoriert Beispiel.

Abhängig von Ihrem DBMS und Ihren Einstellungen sehen Sie möglicherweise eine Warnung, dass NULL Werte wurden in der Ergebnismenge eliminiert.

Hier ist ein Beispiel dafür, was Sie sehen könnten:

SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products;

Ergebnis:

+----------------+
| MinimumPrice   |
|----------------|
| 9.99           |
+----------------+
Warning: Null value is eliminated by an aggregate or other SET operation.

All dies sagt uns, dass die Spalte mindestens einen NULL enthielt Wert, und dass er bei der Berechnung der Ergebnisse ignoriert wurde.

Datums-/Uhrzeitdaten

Sie können MIN() verwenden auf Datums-/Uhrzeitwerten.

Angenommen, wir haben die folgende Tabelle:

SELECT PetName, DOB 
FROM Pets;

Ergebnis:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
| Bark      | NULL       |
| Meow      | NULL       |
+-----------+------------+

Wir können MIN() verwenden um das Mindestgeburtsdatum zu finden (DOB ).

SELECT MIN(DOB) AS MinDOB
FROM Pets;

Ergebnis:

+------------+
| MinDOB     |
|------------|
| 2018-10-01 |
+------------+

Auch hier wird NULL ignoriert Werte.

Charakterdaten

Bei Verwendung mit Zeichendatenspalten MIN() findet den niedrigsten Wert in der Sortierreihenfolge.

Beispiel:

SELECT MIN(ProductName) AS MinimumProductName
FROM Products;

Ergebnis:

+---------------------------------+
| MinimumProductName              |
|---------------------------------|
| Bottomless Coffee Mugs (4 Pack) |
+---------------------------------+

Der DISTINCT Schlüsselwort

Ihr DBMS erlaubt möglicherweise den DISTINCT Schlüsselwort, das mit MIN() verwendet werden soll Funktion. Wenn ja, geschieht dies wahrscheinlich, um dem ISO-SQL-Standard zu entsprechen.

Daher können Sie Folgendes tun:

SELECT MIN(DISTINCT ProductPrice) AS MinimumPrice
FROM Products;

Ergebnis:

+----------------+
| MinimumPrice   |
|----------------|
| 9.99           |
+----------------+

Aber es wird keinen Einfluss auf die Ergebnisse haben.

Der DISTINCT Schlüsselwort kann sehr nützlich sein, wenn es mit anderen Kontexten verwendet wird (z. B. mit dem COUNT() Funktion), aber es hat keine Bedeutung, wenn es mit MIN() verwendet wird . Der DISTINCT Schlüsselwort entfernt Duplikate, aber im Fall von MIN() es macht keinen Unterschied, weil MIN() gibt dasselbe Ergebnis zurück, unabhängig davon, wie viele Zeilen denselben Mindestwert aufweisen.

Fensterfunktionen

Abhängig von Ihrem DBMS können Sie möglicherweise einen OVER verwenden -Klausel mit Ihrem MIN() Funktion zum Erstellen einer Fensterfunktion.

Eine Fensterfunktion führt eine aggregierte Operation für eine Reihe von Abfragezeilen aus. Es erzeugt ein Ergebnis für jede Abfragezeile. Dies steht im Gegensatz zu einer Aggregatoperation, die Abfragezeilen in einer einzigen Ergebniszeile gruppiert.

Hier ist ein Beispiel, um das Konzept zu demonstrieren.

Wir haben uns bereits die Products angesehen Tisch. Unsere Datenbank hat auch einen Customers Tabelle, und sie enthält die folgenden Daten:

+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
| CustomerId   | CustomerName         | PostalAddress     | City       | StateProvince   | ZipCode    | Country   | Phone          |
|--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
| 1001         | Palm Pantry          | 20 Esplanade      | Townsville | QLD             | 2040       | AUS       | (308) 555-0100 |
| 1002         | Tall Poppy           | 12 Main Road      | Columbus   | OH              | 43333      | USA       | (310) 657-0134 |
| 1003         | Crazy Critters       | 10 Infinite Loops | Cairns     | QLD             | 4870       | AUS       | (418) 555-0143 |
| 1004         | Oops Media           | 4 Beachside Drive | Perth      | WA              | 1234       | AUS       | (405) 443-5987 |
| 1005         | Strange Names Inc.   | 789 George Street | Sydney     | NSW             | 2000       | AUD       | (318) 777-0177 |
| 1006         | Hi-Five Solutionists | 5 High Street     | Highlands  | HI              | 1254       | AUS       | (415) 413-5182 |
+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+

Wir können Daten aus diesen Tabellen abrufen und sie mithilfe eines Joins als eine Ergebnismenge darstellen.

Wir können auch MIN() verwenden Funktion mit dem OVER -Klausel, um eine Fensterfunktion auf die Daten anzuwenden.

SELECT 
    v.VendorName,
    p.ProductName,
    p.ProductPrice,
    MIN(ProductPrice) OVER (PARTITION BY v.VendorName) AS "Minimum Price For This Vendor"
FROM Products p 
INNER JOIN Vendors v 
ON v.VendorId = p.VendorId
ORDER BY VendorName, ProductPrice, "Minimum Price For This Vendor";

Ergebnis:

+---------------+---------------------------------+----------------+---------------------------------+
| VendorName    | ProductName                     | ProductPrice   | Minimum Price For This Vendor   |
|---------------+---------------------------------+----------------+---------------------------------|
| Katty Kittens | Bottomless Coffee Mugs (4 Pack) | 9.99           | 9.99                            |
| Mars Supplies | Long Weight (green)             | 11.99          | 11.99                           |
| Mars Supplies | Long Weight (blue)              | 14.75          | 11.99                           |
| Mars Supplies | Left handed screwdriver         | 25.99          | 11.99                           |
| Pedal Medals  | Straw Dog Box                   | NULL           | 245.00                          |
| Pedal Medals  | Chainsaw                        | 245.00         | 245.00                          |
| Randy Roofers | Sledge Hammer                   | 33.49          | 33.49                           |
+---------------+---------------------------------+----------------+---------------------------------+

In diesem Fall haben wir den OVER verwendet -Klausel mit unserem MIN() Funktion, um das Ergebnis nach Herstellernamen zu partitionieren.

Auf diese Weise konnten wir Preisinformationen für jedes Produkt sowie den Mindestpreis für alle Produkte dieses bestimmten Anbieters zurückgeben. Dieser Mindestpreis ändert sich, wenn sich der Anbieter ändert (es sei denn, mehrere Anbieter haben denselben Mindestpreis), bleibt jedoch für alle Produkte desselben Anbieters gleich.

Dieses Konzept lässt sich auch auf andere Aggregatfunktionen in SQL anwenden, wie z. B. SUM() , AVG() , MAX() , und COUNT() .