SQLite max()
функцията връща максималната стойност от всички стойности в група.
Максималната стойност е стойността, която ще се появи последна в заявка, която използва ORDER BY
клауза в същата колона.
Пример
Ето пример за демонстрация.
SELECT max(Price) FROM Products;
Резултат:
389.45
Ето заявка, която връща всички редове в тази таблица.
SELECT * FROM Products
ORDER BY Price;
Резултат:
ProductId ProductName Price ---------- ----------- ---------- 5 Red Widget 3 Widget Open 89.27 4 Foobar Set 120.0 2 Widget Hold 139.5 1 Blue Widget 389.45
Забележете, че първият ред има стойност NULL за цената. max()
функцията игнорира това, защото другите редове имат стойности, различни от NULL. Ако всички редове са NULL, тогава max()
ще върне NULL.
Използвах ORDER BY
клауза в този пример. Както споменахме, max()
функцията връща стойността, която се появява последна при използване на тази клауза (ако приемем, че подреждате колоната във възходящ ред, което е по подразбиране).
Само за да е ясно, можех да използвам следното за същия резултат:
SELECT * FROM Products
ORDER BY Price ASC;
Комбинирайте Max() с Count()
Ето пример, който комбинира max()
функция с count()
функция за връщане на максималния брой.
SELECT max(AlbumCount)
FROM (SELECT ArtistId, count(Title) AS AlbumCount
FROM Album
GROUP BY ArtistId);
Резултат:
21
Можем да проверим това, като изпълним друга заявка с ORDER BY
клауза.
SELECT
ar.Name,
count(al.Title) AS AlbumCount
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
GROUP BY ar.Name
ORDER BY AlbumCount DESC
LIMIT 10;
Резултат:
Name AlbumCount -------------------- ---------- Iron Maiden 21 Led Zeppelin 14 Deep Purple 11 Metallica 10 U2 10 Ozzy Osbourne 6 Pearl Jam 5 Faith No More 4 Foo Fighters 4 Lost 4
Работа с NULL стойности
Както споменахме, ако в групата няма стойности, различни от NULL (т.е. всички стойности са NULL), тогава max()
връща NULL.
SELECT
max(123),
max(NULL);
Резултат:
max(123) max(NULL) ---------- ---------- 123
Използване на Max() върху низове
Както споменахме, max()
връща стойността, която би била върната последна с помощта на ORDER BY
клауза (ако приемем, че използва възходящ ред по подразбиране).
Същата концепция се отнася и за низовете.
SELECT max(ProductName) FROM Products;
Резултат:
Widget Opener
Така че не връща низа с максимално количество знаци или нещо подобно.
Можем да проверим този резултат със заявка, използвайки ORDER BY
клауза.
SELECT * FROM Products
ORDER BY ProductName;
Резултат:
ProductId ProductName Price ---------- --------------------- ---------- 1 Blue Widgets (6 Pack) 389.45 4 Foobar Set 120.0 5 Red Widget 2 Widget Holder 139.5 3 Widget Opener 89.27