sql >> Database >  >> RDS >> Database

SQL MIN() voor beginners

In SQL is de MIN() functie is een aggregatiefunctie die de minimumwaarde in een bepaalde uitdrukking retourneert.

Hieronder staan ​​enkele basisvoorbeelden om te laten zien hoe het werkt.

Voorbeeldtabel

Stel dat we de volgende tabel hebben:

SELECT * FROM Products;

Resultaat:

+-------------+------------+---------------------------------+----------------+-----------------------------------------+
| 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.        |
+-------------+------------+---------------------------------+----------------+-----------------------------------------+

Voorbeeld

Hier is een eenvoudig voorbeeld om te demonstreren.

SELECT MIN(ProductPrice)
FROM Products;

Resultaat:

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

In dit geval wordt prijsinformatie opgeslagen in de ProductPrice kolom, en dus geven we dat door als argument aan de MIN() functie, die vervolgens het resultaat berekent en retourneert.

Kolomaliassen gebruiken

U zult merken dat de vorige resultaten geen kolomnaam bevatten. Dit is te verwachten, omdat de MIN() functie retourneert geen kolommen. U kunt eenvoudig een kolomnaam opgeven door een alias toe te wijzen.

SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products;

Resultaat:

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

Gefilterde resultaten

De MIN() functie werkt op de rijen die door de query worden geretourneerd. Dus als u de resultaten filtert, wordt het resultaat van MIN() zal dat weerspiegelen.

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

Resultaat:

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

In dit geval is 11,99 de minimumprijs van alle producten die door de opgegeven leverancier worden aangeboden.

NULL Waarden

De MIN() functie negeert elke NULL waarden. In onze voorbeeldtabel hierboven, productnummer 6 heeft NULL in zijn ProductPrice kolom, maar dat werd genegeerd in onze MIN() voorbeeld.

Afhankelijk van uw DBMS en uw instellingen, ziet u mogelijk wel of niet een waarschuwing dat NULL waarden zijn geëlimineerd in de resultatenset.

Hier is een voorbeeld van wat je zou kunnen zien:

SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products;

Resultaat:

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

Dit alles vertelt ons dat de kolom ten minste één NULL . bevatte waarde, en dat deze werd genegeerd bij het berekenen van de resultaten.

Datum-/tijdgegevens

U kunt MIN() . gebruiken op datum/tijd-waarden.

Stel dat we de volgende tabel hebben:

SELECT PetName, DOB 
FROM Pets;

Resultaat:

+-----------+------------+
| 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       |
+-----------+------------+

We kunnen MIN() . gebruiken om de minimale geboortedatum te vinden (DOB ).

SELECT MIN(DOB) AS MinDOB
FROM Pets;

Resultaat:

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

Nogmaals, het negeert NULL waarden.

Karaktergegevens

Bij gebruik met karaktergegevenskolommen, MIN() vindt de waarde die het laagst is in de sorteervolgorde.

Voorbeeld:

SELECT MIN(ProductName) AS MinimumProductName
FROM Products;

Resultaat:

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

De DISTINCT Zoekwoord

Uw DBMS kan de DISTINCT . toestaan trefwoord dat moet worden gebruikt met de MIN() functie. Zo ja, dan is dit waarschijnlijk om te voldoen aan de ISO SQL-standaard.

Daarom kunt u dit mogelijk doen:

SELECT MIN(DISTINCT ProductPrice) AS MinimumPrice
FROM Products;

Resultaat:

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

Maar het heeft geen invloed op de resultaten.

De DISTINCT trefwoord kan erg handig zijn bij gebruik met andere contexten (bijv. met de COUNT() functie), maar het heeft geen betekenis bij gebruik met MIN() . De DISTINCT trefwoord verwijdert duplicaten, maar in het geval van MIN() het maakt geen verschil omdat MIN() geeft hetzelfde resultaat, ongeacht hoeveel rijen dezelfde minimumwaarde delen.

Vensterfuncties

Afhankelijk van uw DBMS kunt u mogelijk een OVER . gebruiken clausule met uw MIN() functie om een ​​vensterfunctie te creëren.

Een vensterfunctie voert een aggregatie-achtige bewerking uit op een set queryrijen. Het produceert een resultaat voor elke queryrij. Dit in tegenstelling tot een aggregatiebewerking, waarbij queryrijen worden gegroepeerd in een enkele resultaatrij.

Hier is een voorbeeld om het concept te demonstreren.

We hebben de Products al gezien tafel. Onze database heeft ook een Customers tabel, en het bevat de volgende gegevens:

+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
| 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 |
+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+

We kunnen gegevens uit deze tabellen halen en ze presenteren als één resultaatset door een join te gebruiken.

We kunnen ook de MIN() . gebruiken functie met de OVER clausule om een ​​vensterfunctie op de gegevens toe te passen.

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";

Resultaat:

+---------------+---------------------------------+----------------+---------------------------------+
| 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 dit geval gebruikten we de OVER clausule met onze MIN() functie om het resultaat te partitioneren op naam van de leverancier.

Door dit te doen, konden we prijsinformatie voor elk product retourneren, evenals de minimumprijs voor alle producten van die bepaalde leverancier. Deze minimumprijs verandert als de leverancier verandert (tenzij meerdere leveranciers dezelfde minimumprijs hebben), maar blijft hetzelfde voor alle producten van dezelfde leverancier.

Dit concept kan ook worden toegepast op andere statistische functies in SQL, zoals SUM() , AVG() , MAX() , en COUNT() .


  1. Werken met MyISAM in MySQL

  2. Barman gebruiken voor PostgreSQL Disaster Recovery

  3. Omvang van SQL Server-database met behulp van back-upgeschiedenis

  4. Createuser:kon geen verbinding maken met database postgres:FATAL:rol tom bestaat niet