O SQLite
max()
A função retorna o valor máximo de todos os valores em um grupo. O valor máximo é o valor que apareceria por último em uma consulta que usa um
ORDER BY
cláusula na mesma coluna. Exemplo
Aqui está um exemplo para demonstrar.
SELECT max(Price) FROM Products;
Resultado:
389.45
Aqui está uma consulta que retorna todas as linhas dessa tabela.
SELECT * FROM Products
ORDER BY Price;
Resultado:
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
Observe que a primeira linha tem um valor NULL para o preço. O
max()
A função ignora isso, porque as outras linhas têm valores não NULL. Se todas as linhas forem NULL, então max()
retornaria NULL. Eu usei o
ORDER BY
cláusula neste exemplo. Como mencionado, o max()
A função retorna o valor que aparece por último ao usar esta cláusula (supondo que você ordene a coluna em ordem crescente, que é o padrão). Só para ficar claro, eu poderia ter usado o seguinte para o mesmo resultado:
SELECT * FROM Products
ORDER BY Price ASC;
Combine Max() com Count()
Aqui está um exemplo que combina o
max()
função com o count()
função para retornar a contagem máxima. SELECT max(AlbumCount)
FROM (SELECT ArtistId, count(Title) AS AlbumCount
FROM Album
GROUP BY ArtistId);
Resultado:
21
Podemos verificar isso executando outra consulta com um
ORDER BY
cláusula. 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;
Resultado:
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
Lidando com valores NULL
Como mencionado, se não houver valores não NULL no grupo (ou seja, todos os valores são NULL), então
max()
retorna NULO. SELECT
max(123),
max(NULL);
Resultado:
max(123) max(NULL) ---------- ---------- 123
Usando Max() em Strings
Como mencionado,
max()
retorna o valor que seria retornado por último usando o ORDER BY
cláusula (assumindo que está usando a ordem crescente padrão). Este mesmo conceito se aplica a strings.
SELECT max(ProductName) FROM Products;
Resultado:
Widget Opener
Portanto, não retorna a string com a quantidade máxima de caracteres ou algo assim.
Podemos verificar esse resultado com uma consulta usando o
ORDER BY
cláusula. SELECT * FROM Products
ORDER BY ProductName;
Resultado:
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