sql >> Databáze >  >> RDS >> Mysql

MAX() – Najděte maximální hodnotu ve sloupci v MySQL

MySQL MAX() funkce je agregační funkce, která vrací maximální hodnotu z výrazu.

Typicky by výraz byl rozsah hodnot vrácených jako samostatné řádky ve sloupci a tuto funkci můžete použít k nalezení maximální hodnoty z vrácených řádků. Pokud neexistují žádné odpovídající řádky, MAX() vrátí NULL .

Tuto funkci můžete použít například ke zjištění, které město má největší počet obyvatel ze seznamu měst.

Syntaxe

Syntaxe MAX() vypadá takto:

MAX([DISTINCT] expr) [over_clause]

Kde expr je výraz, pro který chcete maximální hodnotu.

 over_clause je volitelná klauzule, která pracuje s funkcemi okna. Všimněte si, že over_clause lze použít pouze v případě, že nepoužíváte DISTINCT klíčové slovo.

(volitelný) DISTINCT klíčové slovo lze použít k odstranění duplicitních hodnot.

Základní příklad

Nejprve jsou zde nezpracovaná data, která použijeme v tomto příkladu:

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

Výsledek:

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

Můžeme použít MAX() funkce k nalezení města s největším počtem obyvatel (tj. řádek s maximální hodnotou ve sloupci s počtem obyvatel).

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

Výsledek:

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

Klauzule GROUP BY

Můžeme použít GROUP BY klauzule k uvedení každé země spolu s počtem obyvatel největšího města dané země (podle počtu obyvatel):

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

Výsledek:

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

Ustanovení ORDER BY

Můžeme také použít ORDER BY klauzule k určení sloupce, se kterým se má seřadit podle:

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

Výsledek:

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

To seřadí výsledky ve vzestupném pořadí, přičemž jako první je uvedena minimální hodnota.

Pamatujte, že při objednávání pomocí víceslovného aliasu (například `Max Value` ), musíte použít znak zpětného zaškrtnutí (` ) namísto apostrofu (' ) k ohraničení dvou slov.

Najděte maximální délku znaků

MAX() funkce není omezena pouze na sloupce s číselnými údaji. Můžete také kombinovat MAX() s dalšími funkcemi, abyste vrátili maximální hodnoty v jiných oblastech.

Například pomocí našich ukázkových dat můžeme najít hodnotu s maximálním počtem znaků v City sloupec:

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

Výsledek:

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

Můžeme to vidět také pomocí následujícího dotazu (který nezahrnuje MAX() funkce):

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

Výsledek:

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

Použití klauzule OVER

Jak již bylo zmíněno, syntaxe umožňuje OVER klauzule, která má být zahrnuta do vašich dotazů. V podstatě OVER klauzule umožňuje určit, jak rozdělit řádky dotazu do skupin pro zpracování funkcí okna.

Zde je příklad:

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;

Výsledek:

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

Tento příklad rozděluje řádky podle District , poskytující maximální hodnotu pro každý oddíl (okres). To vám umožní zobrazit podrobnější údaje, jako je počet obyvatel každého města a počet obyvatel největšího města ve stejném okrese.


  1. Jak vytvořit vnořenou tabulku pomocí uživatelsky definovaného datového typu v databázi Oracle

  2. Jak změnit aktuální formát data v SQL Server (T-SQL)

  3. Uživateli byl odepřen přístup Java JDBC

  4. cx_Oracle a zpracování výjimek – osvědčené postupy?