sql >> Database >  >> RDS >> Mysql

MAX() – Vind de maximale waarde in een kolom in MySQL

De MySQL MAX() functie is een aggregatiefunctie die de maximale waarde van een uitdrukking retourneert.

Meestal is de expressie een bereik van waarden die als afzonderlijke rijen in een kolom worden geretourneerd, en u kunt deze functie gebruiken om de maximale waarde uit de geretourneerde rijen te vinden. Als er geen overeenkomende rijen zijn, MAX() retourneert NULL .

U kunt deze functie bijvoorbeeld gebruiken om uit te zoeken welke stad de grootste bevolking heeft van een lijst met steden.

Syntaxis

De syntaxis van MAX() gaat als volgt:

MAX([DISTINCT] expr) [over_clause]

Waar expr is de uitdrukking waarvoor u de maximale waarde wilt.

De over_clause is een optionele clausule die werkt met vensterfuncties. Merk op dat de over_clause kan alleen worden gebruikt als u de DISTINCT . niet gebruikt zoekwoord.

De (optionele) DISTINCT trefwoord kan worden gebruikt om dubbele waarden te elimineren.

Basisvoorbeeld

Ten eerste zijn hier de onbewerkte gegevens die we in dit voorbeeld zullen gebruiken:

USE world;
SELECT Name, Population
FROM City
WHERE CountryCode = 'THA';

Resultaat:

+-------------------+------------+
| Name              | Population |
+-------------------+------------+
| Bangkok           |    6320174 |
| Nonthaburi        |     292100 |
| Nakhon Ratchasima |     181400 |
| Chiang Mai        |     171100 |
| Udon Thani        |     158100 |
| Hat Yai           |     148632 |
| Khon Kaen         |     126500 |
| Pak Kret          |     126055 |
| Nakhon Sawan      |     123800 |
| Ubon Ratchathani  |     116300 |
| Songkhla          |      94900 |
| Nakhon Pathom     |      94100 |
+-------------------+------------+

We kunnen de MAX() . gebruiken functie om de stad met de grootste bevolking te vinden (d.w.z. de rij met de maximale waarde in de bevolkingskolom).

USE world;
SELECT MAX(Population) AS 'Maximum Value'
FROM City
WHERE CountryCode = 'THA';

Resultaat:

+---------------+
| Maximum Value |
+---------------+
|       6320174 |
+---------------+

De GROUP BY-clausule

We kunnen de GROUP BY . gebruiken clausule om elk land op te sommen, samen met de bevolking van de grootste stad van dat land (per bevolking):

USE world;
SELECT District, MAX(Population) AS 'Max Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District;

Resultaat:

+-----------------+-----------+
| District        | Max Value |
+-----------------+-----------+
| New South Wales |   3276207 |
| Victoria        |   2865329 |
| Queensland      |   1291117 |
| West Australia  |   1096829 |
| South Australia |    978100 |
| Capital Region  |    322723 |
| Tasmania        |    126118 |
+-----------------+-----------+

De ORDER BY-clausule

We kunnen ook de ORDER BY . gebruiken clausule om een ​​kolom op te geven waarmee besteld kan worden op:

USE world;
SELECT District, MAX(Population) AS 'Max Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District
ORDER BY `Max Value` ASC;

Resultaat:

+-----------------+-----------+
| District        | Max Value |
+-----------------+-----------+
| Tasmania        |    126118 |
| Capital Region  |    322723 |
| South Australia |    978100 |
| West Australia  |   1096829 |
| Queensland      |   1291117 |
| Victoria        |   2865329 |
| New South Wales |   3276207 |
+-----------------+-----------+

Hierdoor worden de resultaten in oplopende volgorde gerangschikt, waarbij de minimumwaarde eerst wordt weergegeven.

Houd er rekening mee dat wanneer u bestelt met een alias met meerdere woorden (zoals `Max Value` ), moet u het backtick-teken gebruiken (` ) in plaats van de apostrof (' ) om de twee woorden te omringen.

Vind de maximale tekenlengte

De MAX() functie is niet beperkt tot alleen kolommen met numerieke gegevens. Je kunt ook MAX() . combineren met andere functies om maximale waarden in andere gebieden te retourneren.

Met behulp van onze voorbeeldgegevens kunnen we bijvoorbeeld de waarde met het maximale aantal tekens vinden in de City kolom:

SELECT MAX(CHAR_LENGTH(Name)) AS 'Maximum Character Length'
FROM city;

Resultaat:

+--------------------------+
| Maximum Character Length |
+--------------------------+
|                       34 |
+--------------------------+

We kunnen dit ook zien door de volgende query te gebruiken (die geen gebruik maakt van de MAX() functie):

SELECT Name, CHAR_LENGTH(Name) AS 'Character Length'
FROM city
ORDER BY `Character Length` DESC
LIMIT 10;

Resultaat:

+--------------------------------------+------------------+
| Name                                 | Character Length |
+--------------------------------------+------------------+
| Luxembourg [Luxemburg/Lëtzebuerg]   |               34 |
| Castellón de la Plana [Castell      |               31 |
| San Fernando del Valle de Cata       |               30 |
| Santo Domingo de los Colorados       |               30 |
| Thiruvananthapuram (Trivandrum       |               30 |
| [San Cristóbal de] la Laguna        |               29 |
| Ingraj Bazar (English Bazar)         |               28 |
| Soledad de Graciano Sánchez         |               28 |
| Valle de Chalco Solidaridad          |               27 |
| Machilipatnam (Masulipatam)          |               27 |
+--------------------------------------+------------------+

Een OVER-clausule gebruiken

Zoals vermeld, staat de syntaxis een OVER . toe clausule die in uw vragen moet worden opgenomen. Kortom, de OVER clausule kunt u specificeren hoe queryrijen in groepen moeten worden verdeeld voor verwerking door de vensterfunctie.

Hier is een voorbeeld:

SELECT 
    District,
    Name AS City,
    Population AS 'City Population',
    MAX(Population) OVER(PARTITION BY District) AS 'District Max'
FROM City
WHERE CountryCode = 'AUS'
ORDER BY `District Max` DESC;

Resultaat:

+-----------------+---------------+-----------------+--------------+
| District        | City          | City Population | District Max |
+-----------------+---------------+-----------------+--------------+
| New South Wales | Sydney        |         3276207 |      3276207 |
| New South Wales | Wollongong    |          219761 |      3276207 |
| New South Wales | Newcastle     |          270324 |      3276207 |
| New South Wales | Central Coast |          227657 |      3276207 |
| Victoria        | Melbourne     |         2865329 |      2865329 |
| Victoria        | Geelong       |          125382 |      2865329 |
| Queensland      | Townsville    |          109914 |      1291117 |
| Queensland      | Brisbane      |         1291117 |      1291117 |
| Queensland      | Cairns        |           92273 |      1291117 |
| Queensland      | Gold Coast    |          311932 |      1291117 |
| West Australia  | Perth         |         1096829 |      1096829 |
| South Australia | Adelaide      |          978100 |       978100 |
| Capital Region  | Canberra      |          322723 |       322723 |
| Tasmania        | Hobart        |          126118 |       126118 |
+-----------------+---------------+-----------------+--------------+

Dit voorbeeld verdeelt de rijen op District , met de maximale waarde voor elke partitie (district). Hierdoor kunt u gedetailleerdere gegevens zien, zoals de bevolking van elke stad, samen met de bevolking van de grootste stad in hetzelfde district.


  1. Voeg een tabel en een wijzigingslogboek samen in een weergave in PostgreSQL

  2. Hoe maak je verbinding met meerdere MySQL-databases op één webpagina?

  3. MariaDB SCHEMA() uitgelegd

  4. Identiteitskolomwaarde springt plotseling naar 1001 in sql-server