sql >> Databasteknik >  >> RDS >> Mysql

MAX() – Hitta det maximala värdet i en kolumn i MySQL

MySQL MAX() funktion är en aggregerad funktion som returnerar det maximala värdet från ett uttryck.

Vanligtvis skulle uttrycket vara ett värdeintervall som returneras som separata rader i en kolumn, och du kan använda den här funktionen för att hitta det maximala värdet från de returnerade raderna. Om det inte finns några matchande rader, MAX() returnerar NULL .

Du kan till exempel använda den här funktionen för att ta reda på vilken stad som har den största befolkningen av en lista med städer.

Syntax

Syntaxen för MAX() går så här:

MAX([DISTINCT] expr) [over_clause]

Där expr är uttrycket som du vill ha det maximala värdet för.

 over_clause är en valfri klausul som fungerar med fönsterfunktioner. Observera att over_clause kan endast användas om du inte använder DISTINCT nyckelord.

Den (valfria) DISTINCT nyckelord kan användas för att eliminera dubbletter av värden.

Grundläggande exempel

Först, här är rådata som vi kommer att använda i det här exemplet:

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

Resultat:

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

Vi kan använda MAX() funktion för att hitta staden med den största befolkningen (dvs. raden med det maximala värdet i sin befolkningskolumn).

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

Resultat:

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

GROUP BY-klausulen

Vi kan använda GROUP BY klausul för att lista ut varje land, tillsammans med befolkningen i landets största stad (efter befolkning):

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

Resultat:

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

ORDER BY-klausulen

Vi kan också använda ORDER BY sats för att ange en kolumn som du kan beställa efter:

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

Resultat:

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

Detta ordnar resultaten i stigande ordning, som listar minimivärdet först.

Observera att när du beställer efter ett alias med flera ord (som `Max Value` ), måste du använda backteck-tecknet (` ) istället för apostrof (' ) för att omge de två orden.

Hitta den maximala teckenlängden

MAX() Funktionen är inte begränsad till bara kolumner med numeriska data. Du kan också kombinera MAX() med andra funktioner för att returnera maximala värden i andra områden.

Med hjälp av våra exempeldata kan vi till exempel hitta värdet med maximalt antal tecken i City kolumn:

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

Resultat:

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

Vi kan också se detta genom att använda följande fråga (som inte involverar MAX() funktion):

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

Resultat:

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

Använda en OVER-klausul

Som nämnts tillåter syntaxen en OVER klausul som ska inkluderas i dina frågor. I princip OVER sats låter dig specificera hur du partitionerar frågerader i grupper för bearbetning av fönsterfunktionen.

Här är ett exempel:

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;

Resultat:

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

Det här exemplet delar upp raderna efter District , ger det maximala värdet för varje partition (distrikt). Detta gör att du kan se mer detaljerad information, som varje stads befolkning, tillsammans med befolkningen i den största staden i samma distrikt.


  1. Konfiguration med hög tillgänglighet för ClusterControl-noder med CMON HA

  2. Skillnad mellan dessa två anslutningstabeller?

  3. Hur man hämtar kalenderkvartal från ett datum i TSQL

  4. Hur man uppgraderar MySQL på CentOS