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
, предоставяйки минималната стойност за всеки дял (район). Това ви позволява да видите по-подробни данни, като например населението на всеки град, заедно с населението на най-малкия град (по население) в същия район.