sql >> Database teknologi >  >> RDS >> Mysql

MAX() – Find den maksimale værdi i en kolonne i MySQL

 MySQL MAX() funktion er en aggregeret funktion, der returnerer den maksimale værdi fra et udtryk.

Typisk vil udtrykket være et interval af værdier, der returneres som separate rækker i en kolonne, og du kan bruge denne funktion til at finde den maksimale værdi fra de returnerede rækker. Hvis der ikke er nogen matchende rækker, MAX() returnerer NULL .

For eksempel kan du bruge denne funktion til at finde ud af, hvilken by der har den største befolkning ud af en liste over byer.

Syntaks

Syntaksen for MAX() går sådan her:

MAX([DISTINCT] expr) [over_clause]

Hvor expr er det udtryk, du vil have den maksimale værdi for.

 over_clause er en valgfri klausul, der fungerer med vinduesfunktioner. Bemærk, at over_clause kan kun bruges, hvis du ikke bruger DISTINCT søgeord.

Den (valgfri) DISTINCT søgeord kan bruges til at eliminere duplikerede værdier.

Grundlæggende eksempel

For det første er her de rå data, som vi vil bruge i dette eksempel:

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 bruge MAX() funktion til at finde byen med den største befolkning (dvs. rækken med den maksimale værdi i dens befolkningskolonne).

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

Resultat:

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

GROUP BY-klausulen

Vi kan bruge GROUP BY klausul for at angive hvert land sammen med befolkningen i landets største by (efter indbyggertal):

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 også bruge ORDER BY klausul for at specificere en kolonne, der skal bestilles 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 |
+-----------------+-----------+

Dette ordner resultaterne i stigende rækkefølge, som viser minimumværdien først.

Bemærk, at når du bestiller efter et alias med flere ord (som `Max Value` ), skal du bruge backtick-tegnet (` ) i stedet for apostrof (' ) for at omgive de to ord.

Find den maksimale tegnlængde

MAX() funktion er ikke begrænset til kun kolonner med numeriske data. Du kan også kombinere MAX() med andre funktioner for at returnere maksimale værdier i andre områder.

Ved at bruge vores eksempeldata kan vi f.eks. finde værdien med det maksimale antal tegn i City kolonne:

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

Resultat:

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

Vi kan også se dette ved at bruge følgende forespørgsel (som ikke involverer 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 |
+--------------------------------------+------------------+

Brug af en OVER-klausul

Som nævnt tillader syntaksen en OVER klausul, der skal inkluderes i dine forespørgsler. Grundlæggende er OVER klausul giver dig mulighed for at specificere, hvordan du opdeler forespørgselsrækker i grupper til behandling af vinduesfunktionen.

Her er et eksempel:

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

Dette eksempel opdeler rækkerne efter District , der giver den maksimale værdi for hver partition (distrikt). Dette giver dig mulighed for at se mere detaljerede data, såsom hver bys befolkning, sammen med befolkningen i den største by i samme distrikt.


  1. Sådan gemmer du videoindhold i SQLite-databasen (ikke videostien)

  2. Sådan beregnes kumulativ total i MySQL

  3. Sådan ændres kommandolinjeprompten i SQLite

  4. Brug MySQL relationsdatabaser på Debian 5 (Lenny)