Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MAX() – Znajdź maksymalną wartość w kolumnie w MySQL

MySQL MAX() function to funkcja agregująca, która zwraca maksymalną wartość z wyrażenia.

Zazwyczaj wyrażenie będzie zakresem wartości zwracanych jako oddzielne wiersze w kolumnie i można użyć tej funkcji, aby znaleźć maksymalną wartość z zwracanych wierszy. Jeśli nie ma pasujących wierszy, MAX() zwraca NULL .

Na przykład możesz użyć tej funkcji, aby dowiedzieć się, które miasto ma największą populację z listy miast.

Składnia

Składnia MAX() idzie tak:

MAX([DISTINCT] expr) [over_clause]

Gdzie expr to wyrażenie, dla którego chcesz uzyskać maksymalną wartość.

over_clause to opcjonalna klauzula, która działa z funkcjami okna. Zwróć uwagę, że over_clause można użyć tylko wtedy, gdy nie używasz DISTINCT słowo kluczowe.

(Opcjonalnie) DISTINCT słowo kluczowe może zostać użyte do wyeliminowania zduplikowanych wartości.

Przykład podstawowy

Po pierwsze, oto surowe dane, których użyjemy w tym przykładzie:

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

Wynik:

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

Możemy użyć MAX() funkcja znajdowania miasta o największej populacji (tj. wiersz z maksymalną wartością w kolumnie populacji).

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

Wynik:

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

Klauzula GROUP BY

Możemy użyć GROUP BY klauzula, aby wymienić każdy kraj wraz z populacją największego miasta tego kraju (według liczby ludności):

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

Wynik:

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

Klauzula ORDER BY

Możemy również użyć ORDER BY klauzula określająca kolumnę, z którą należy zamawiać według:

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

Wynik:

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

Powoduje to uporządkowanie wyników w porządku rosnącym, w którym najpierw jest wyświetlana minimalna wartość.

Zwróć uwagę, że przy zamawianiu za pomocą wielowyrazowego aliasu (np. `Max Value` ), musisz użyć znaku backticka (` ) zamiast apostrofu (' ), aby otoczyć te dwa słowa.

Znajdź maksymalną długość znaków

MAX() funkcja nie ogranicza się tylko do kolumn z danymi liczbowymi. Możesz także połączyć MAX() z innymi funkcjami, aby zwrócić maksymalne wartości w innych obszarach.

Na przykład, korzystając z naszych przykładowych danych, możemy znaleźć wartość z maksymalną liczbą znaków w City kolumna:

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

Wynik:

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

Możemy to również zobaczyć za pomocą następującego zapytania (które nie obejmuje MAX() funkcja):

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

Wynik:

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

Korzystanie z klauzuli OVER

Jak wspomniano, składnia pozwala na OVER klauzulę, którą należy uwzględnić w zapytaniach. Zasadniczo OVER klauzula pozwala określić sposób podziału wierszy zapytań na grupy do przetworzenia przez funkcję okna.

Oto przykład:

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;

Wynik:

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

Ten przykład dzieli wiersze według District , podając maksymalną wartość dla każdej partycji (dystryktu). Dzięki temu możesz zobaczyć bardziej szczegółowe dane, takie jak populacja każdego miasta, wraz z populacją największego miasta w tej samej dzielnicy.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel 5.4 na PHP 7.0:Wyjątek PDO — nie można znaleźć sterownika (MySQL)

  2. SQLSTATE[HY000] [2002] Próba połączenia nie powiodła się.. - Podczas próby połączenia z serwera lokalnego na zdalny

  3. pdo przygotowane wyciągi z symbolami wieloznacznymi

  4. Kolejność Mysql według określonych wartości ID

  5. Zapytanie do tabeli przestawnej MySQL z dynamicznymi kolumnami