SQLite max()
funktion returnerer den maksimale værdi fra alle værdier i en gruppe.
Den maksimale værdi er den værdi, der vises sidst i en forespørgsel, der bruger en ORDER BY
klausul i samme kolonne.
Eksempel
Her er et eksempel til at demonstrere.
SELECT max(Price) FROM Products;
Resultat:
389.45
Her er en forespørgsel, der returnerer alle rækker i den tabel.
SELECT * FROM Products
ORDER BY Price;
Resultat:
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
Bemærk, at den første række har en NULL-værdi for prisen. max()
funktion ignorerer det, fordi de andre rækker har ikke-NULL værdier. Hvis alle rækker var NULL, så max()
ville returnere NULL.
Jeg brugte ORDER BY
klausul i dette eksempel. Som nævnt er max()
funktion returnerer den værdi, der vises sidst, når du bruger denne klausul (forudsat at du bestiller kolonnen i stigende rækkefølge, som er standard).
Bare for at være klar, kunne jeg have brugt følgende til det samme resultat:
SELECT * FROM Products
ORDER BY Price ASC;
Kombiner Max() med Count()
Her er et eksempel, der kombinerer max()
funktion med count()
funktion for at returnere det maksimale antal.
SELECT max(AlbumCount)
FROM (SELECT ArtistId, count(Title) AS AlbumCount
FROM Album
GROUP BY ArtistId);
Resultat:
21
Vi kan bekræfte dette ved at køre en anden forespørgsel med en ORDER BY
klausul.
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;
Resultat:
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
Håndtering af NULL-værdier
Som nævnt, hvis der ikke er nogen ikke-NULL-værdier i gruppen (dvs. alle værdier er NULL), så max()
returnerer NULL.
SELECT
max(123),
max(NULL);
Resultat:
max(123) max(NULL) ---------- ---------- 123
Brug af Max() på strenge
Som nævnt, max()
returnerer den værdi, der sidst ville blive returneret ved hjælp af ORDER BY
klausul (forudsat at den bruger standard stigende rækkefølge).
Det samme koncept gælder for strenge.
SELECT max(ProductName) FROM Products;
Resultat:
Widget Opener
Så det returnerer ikke strengen med det maksimale antal tegn eller noget lignende.
Vi kan bekræfte dette resultat med en forespørgsel ved hjælp af ORDER BY
klausul.
SELECT * FROM Products
ORDER BY ProductName;
Resultat:
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