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

MIN() – Znajdź minimalną wartość w kolumnie w MySQL

MySQL MIN() function to funkcja agregująca, która zwraca minimalną 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źć minimalną wartość ze zwróconych wierszy. Jeśli nie ma pasujących wierszy, MIN() zwraca NULL .

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

Składnia

Składnia MIN() idzie tak:

MIN([DISTINCT] expr) [over_clause]

Gdzie expr to wyrażenie, dla którego chcesz uzyskać minimalną 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ć MIN() funkcja znajdowania miasta o najmniejszej liczbie ludności (tj. wiersz z najmniejszą wartością w kolumnie populacji).

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

Wynik:

+---------------+
| Minimum Value |
+---------------+
|         94100 |
+---------------+

Klauzula GROUP BY

Możemy użyć GROUP BY klauzula, aby wymienić każdą dzielnicę wraz z populacją najmniejszego miasta tej dzielnicy (według liczby ludności):

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

Wynik:

+-----------------+---------------+
| District        | Minimum Value |
+-----------------+---------------+
| New South Wales |        219761 |
| Victoria        |        125382 |
| Queensland      |         92273 |
| 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, MIN(Population) AS 'Minimum Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District
ORDER BY `Minimum Value` ASC;

Wynik:

+-----------------+---------------+
| District        | Minimum Value |
+-----------------+---------------+
| Queensland      |         92273 |
| Victoria        |        125382 |
| Tasmania        |        126118 |
| New South Wales |        219761 |
| Capital Region  |        322723 |
| South Australia |        978100 |
| West Australia  |       1096829 |
+-----------------+---------------+

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. `Minimum Value` ), musisz użyć znaku backticka (` ) zamiast apostrofu (' ), aby otoczyć te dwa słowa.

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

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

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

SELECT MIN(CHAR_LENGTH(Name)) AS 'Minimum Character Length'
FROM city;

Wynik:

+--------------------------+
| Minimum Character Length |
+--------------------------+
|                        3 |
+--------------------------+

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

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

Wynik:

+------+------------------+
| Name | Character Length |
+------+------------------+
| Ome  |                3 |
| Yao  |                3 |
| Qom  |                3 |
| Itu  |                3 |
| Tsu  |                3 |
| Ube  |                3 |
| Ise  |                3 |
| Uji  |                3 |
| Ede  |                3 |
| Ota  |                3 |
+------+------------------+

Ponieważ wiele miast ma tę samą długość znaków, możemy dostosować to zapytanie, aby zwracało tylko różne wartości:

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

Wynik:

+------------------+
| Character Length |
+------------------+
|                3 |
|                4 |
|                5 |
|                6 |
|                7 |
|                8 |
|                9 |
|               10 |
|               11 |
|               12 |
+------------------+

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',
    MIN(Population) OVER(PARTITION BY District) AS 'District Minimum'
FROM City
WHERE CountryCode = 'AUS'
ORDER BY `District Minimum` DESC;

Wynik:

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

Ten przykład dzieli wiersze według District , podając minimalną wartość dla każdej partycji (dzielnicy). Pozwala to zobaczyć bardziej szczegółowe dane, takie jak populacja każdego miasta, wraz z populacją najmniejszego miasta (według liczby ludności) 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. Instrukcja VALUES w MySQL

  2. Lista specyfikatorów formatu daty w MySQL

  3. Czy SQL Server oferuje coś podobnego do aktualizacji MySQL ON DUPLICATE KEY?

  4. Używanie strtotime dla dat sprzed 1970

  5. Jak utworzyć nowy diagram bazy danych za pomocą środowiska pracy MySQL?