SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Wie SQLite Max() funktioniert

Das SQLite max() Die Funktion gibt den Maximalwert aus allen Werten in einer Gruppe zurück.

Der Höchstwert ist der Wert, der zuletzt in einer Abfrage erscheinen würde, die einen ORDER BY verwendet Klausel in derselben Spalte.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SELECT max(Price) FROM Products;

Ergebnis:

389.45

Hier ist eine Abfrage, die alle Zeilen in dieser Tabelle zurückgibt.

SELECT * FROM Products 
ORDER BY Price;

Ergebnis:

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    

Beachten Sie, dass die erste Zeile einen NULL-Wert für den Preis enthält. Der max() Die Funktion ignoriert dies, da die anderen Zeilen Nicht-NULL-Werte haben. Wenn alle Zeilen NULL waren, dann max() würde NULL zurückgeben.

Ich habe den ORDER BY verwendet Klausel in diesem Beispiel. Wie bereits erwähnt, die max() Die Funktion gibt den Wert zurück, der bei Verwendung dieser Klausel zuletzt erscheint (vorausgesetzt, Sie sortieren die Spalte in aufsteigender Reihenfolge, was der Standardwert ist).

Nur um das klarzustellen, ich hätte Folgendes für dasselbe Ergebnis verwenden können:

SELECT * FROM Products 
ORDER BY Price ASC;

Kombiniere Max() mit Count()

Hier ist ein Beispiel, das max() kombiniert Funktion mit dem count() Funktion, um die maximale Anzahl zurückzugeben.

SELECT max(AlbumCount) 
FROM (SELECT ArtistId, count(Title) AS AlbumCount
FROM Album
GROUP BY ArtistId);

Ergebnis:

21       

Wir können dies überprüfen, indem wir eine weitere Abfrage mit einem ORDER BY ausführen Klausel.

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;

Ergebnis:

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                

Umgang mit NULL-Werten

Wie bereits erwähnt, wenn es keine Nicht-NULL-Werte in der Gruppe gibt (d. h. alle Werte sind NULL), dann max() gibt NULL zurück.

SELECT 
  max(123),
  max(NULL);

Ergebnis:

max(123)    max(NULL) 
----------  ----------
123                   

Max() für Strings verwenden

Wie bereits erwähnt, max() gibt den Wert zurück, der zuletzt mit ORDER BY zurückgegeben würde -Klausel (vorausgesetzt, es wird die standardmäßige aufsteigende Reihenfolge verwendet).

Dasselbe Konzept gilt für Strings.

SELECT max(ProductName) FROM Products;

Ergebnis:

Widget Opener

Es gibt also nicht die Zeichenfolge mit der maximalen Anzahl von Zeichen oder ähnlichem zurück.

Wir können dieses Ergebnis mit einer Abfrage mit dem ORDER BY überprüfen Klausel.

SELECT * FROM Products 
ORDER BY ProductName;

Ergebnis:

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