SQLite max()
Funkce vrací maximální hodnotu ze všech hodnot ve skupině.
Maximální hodnota je hodnota, která se zobrazí jako poslední v dotazu, který používá ORDER BY
klauzule ve stejném sloupci.
Příklad
Zde je příklad k demonstraci.
SELECT max(Price) FROM Products;
Výsledek:
389.45
Zde je dotaz, který vrátí všechny řádky v této tabulce.
SELECT * FROM Products
ORDER BY Price;
Výsledek:
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
Všimněte si, že první řádek má pro cenu hodnotu NULL. max()
funkce to ignoruje, protože ostatní řádky mají hodnoty jiné než NULL. Pokud byly všechny řádky NULL, pak max()
vrátí NULL.
Použil jsem ORDER BY
klauzule v tomto příkladu. Jak již bylo zmíněno, max()
funkce vrátí hodnotu, která se při použití této klauzule zobrazí jako poslední (za předpokladu, že sloupec seřadíte vzestupně, což je výchozí nastavení).
Aby bylo jasno, pro stejný výsledek jsem mohl použít následující:
SELECT * FROM Products
ORDER BY Price ASC;
Kombinovat Max() s Count()
Zde je příklad, který kombinuje max()
funkce s count()
funkce vrátí maximální počet.
SELECT max(AlbumCount)
FROM (SELECT ArtistId, count(Title) AS AlbumCount
FROM Album
GROUP BY ArtistId);
Výsledek:
21
Můžeme to ověřit spuštěním dalšího dotazu s ORDER BY
doložka.
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;
Výsledek:
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
Zacházení s hodnotami NULL
Jak již bylo zmíněno, pokud ve skupině nejsou žádné hodnoty než NULL (tj. všechny hodnoty jsou NULL), pak max()
vrátí NULL.
SELECT
max(123),
max(NULL);
Výsledek:
max(123) max(NULL) ---------- ---------- 123
Použití Max() na řetězcích
Jak již bylo zmíněno, max()
vrátí hodnotu, která by byla vrácena jako poslední pomocí ORDER BY
klauzule (za předpokladu, že používá výchozí vzestupné pořadí).
Stejný koncept platí pro řetězce.
SELECT max(ProductName) FROM Products;
Výsledek:
Widget Opener
Nevrací tedy řetězec s maximálním počtem znaků ani nic podobného.
Tento výsledek můžeme ověřit dotazem pomocí ORDER BY
doložka.
SELECT * FROM Products
ORDER BY ProductName;
Výsledek:
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