Mysql
 sql >> база данни >  >> RDS >> Mysql

MIN() – Намерете минималната стойност в колона в MySQL

 MySQL MIN() функцията е агрегатна функция, която връща минималната стойност от израз.

Обикновено изразът ще бъде диапазон от стойности, върнати като отделни редове в колона, и можете да използвате тази функция, за да намерите минималната стойност от върнатите редове. Ако няма съвпадащи редове, MIN() връща NULL .

Например, можете да използвате тази функция, за да разберете кой град има най-малко население от списък с градове.

Синтаксис

Синтаксисът на MIN() става така:

MIN([DISTINCT] expr) [over_clause]

Където expr е изразът, за който искате минималната стойност.

 over_clause е незадължителна клауза, която работи с функциите на прозореца. Обърнете внимание, че over_clause може да се използва само ако не използвате DISTINCT ключова дума.

(по избор) DISTINCT ключова дума може да се използва за премахване на дублиращи се стойности.

Основен пример

Първо, ето необработените данни, които ще използваме в този пример:

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

Резултат:

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

Можем да използваме MIN() функция за намиране на града с най-малко население (т.е. реда с най-малка стойност в колоната за населението).

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

Резултат:

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

Клаузата GROUP BY

Можем да използваме GROUP BY клауза за изброяване на всеки район, заедно с населението на най-малкия град в този район (по население):

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

Резултат:

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

Клауза ORDER BY

Можем също да използваме ORDER BY клауза, за да посочите колона, с която да подредите по:

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

Резултат:

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

Това подрежда резултатите във възходящ ред, който изброява първо минималната стойност.

Имайте предвид, че когато поръчвате по псевдоним от няколко думи (като `Minimum Value` ), трябва да използвате символа за обратна отметка (` ) вместо апострофа (' ), за да обградите двете думи.

Намерете минималната дължина на символа

MIN() функцията не се ограничава само до колони с числови данни. Можете също да комбинирате MIN() с други функции за връщане на минимални стойности в други области.

Например, използвайки нашите примерни данни, можем да намерим стойността с минималния брой знаци в City колона:

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

Резултат:

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

Можем също да видим това, като използваме следната заявка (която не включва MIN() функция):

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

Резултат:

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

Виждайки, че няколко града имат една и съща дължина на знаците, можем да коригираме тази заявка, за да връща само отделните стойности:

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

Резултат:

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

Използване на клауза OVER

Както споменахме, синтаксисът позволява OVER клауза, която да бъде включена във вашите запитвания. По принцип OVER Клаузата ви позволява да укажете как да разделяте редовете на заявка на групи за обработка от функцията прозорец.

Ето един пример:

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

Резултат:

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

Този пример разделя редовете по District , предоставяйки минималната стойност за всеки дял (район). Това ви позволява да видите по-подробни данни, като например населението на всеки град, заедно с населението на най-малкия град (по население) в същия район.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INSERT INTO или UPDATE с две условия

  2. Рекурсивни категории с една заявка?

  3. Как да получите броя дни на разлика между две дати в MySQL?

  4. Използване на ORDER BY и GROUP BY заедно

  5. Уникално ограничение, което позволява празни стойности в MySQL