SQLite max()
funkcja zwraca maksymalną wartość spośród wszystkich wartości w grupie.
Maksymalna wartość to wartość, która pojawiłaby się jako ostatnia w zapytaniu używającym ORDER BY
klauzula w tej samej kolumnie.
Przykład
Oto przykład do zademonstrowania.
SELECT max(Price) FROM Products;
Wynik:
389.45
Oto zapytanie, które zwraca wszystkie wiersze w tej tabeli.
SELECT * FROM Products
ORDER BY Price;
Wynik:
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
Zauważ, że pierwszy wiersz ma wartość NULL dla ceny. max()
funkcja ignoruje to, ponieważ inne wiersze mają wartości różne od NULL. Jeśli wszystkie wiersze mają wartość NULL, to max()
zwróci NULL.
Użyłem ORDER BY
w tym przykładzie. Jak wspomniano, max()
funkcja zwraca wartość, która pojawia się jako ostatnia przy użyciu tej klauzuli (zakładając, że uporządkujesz kolumnę w kolejności rosnącej, co jest domyślne).
Żeby było jasne, do tego samego wyniku mogłem użyć następującego:
SELECT * FROM Products
ORDER BY Price ASC;
Połącz Max() z Count()
Oto przykład, który łączy max()
funkcja z count()
funkcja, aby zwrócić maksymalną liczbę.
SELECT max(AlbumCount)
FROM (SELECT ArtistId, count(Title) AS AlbumCount
FROM Album
GROUP BY ArtistId);
Wynik:
21
Możemy to zweryfikować, uruchamiając kolejne zapytanie z ORDER BY
klauzula.
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;
Wynik:
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
Postępowanie z wartościami NULL
Jak wspomniano, jeśli w grupie nie ma wartości innych niż NULL (tzn. wszystkie wartości mają wartość NULL), to max()
zwraca NULL.
SELECT
max(123),
max(NULL);
Wynik:
max(123) max(NULL) ---------- ---------- 123
Korzystanie z funkcji Max() na ciągach
Jak wspomniano, max()
zwraca wartość, która byłaby zwrócona jako ostatnia przy użyciu ORDER BY
klauzula (zakładając, że używa domyślnej kolejności rosnącej).
Ta sama koncepcja dotyczy ciągów.
SELECT max(ProductName) FROM Products;
Wynik:
Widget Opener
Więc nie zwraca ciągu z maksymalną liczbą znaków ani niczego w tym rodzaju.
Możemy zweryfikować ten wynik za pomocą zapytania przy użyciu ORDER BY
klauzula.
SELECT * FROM Products
ORDER BY ProductName;
Wynik:
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