Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

MIN- und MAX-Aggregatfunktionen in SQL Server

SQL Server-Funktionen

In Datenbanksystemen im Allgemeinen und in SQL Server im Besonderen sind Funktionen Codeteile, die null oder eine Eingabe annehmen und eine einzelne Ausgabe oder ein Array zurückgeben.

Tabellenwertfunktionen, die normalerweise benutzerdefiniert sind, können ein Array zurückgeben, aber integrierte SQL Server-Funktionen sind normalerweise Skalarwertfunktionen. Die dritte Klasse von Funktionen in SQL Server sind aggregierte Funktionen. Die MIN- und MAX-Funktionen von SQL Server sind aggregierte Funktionen.

Fensterfunktionen sind eine relativ neue Klasse. Sie führen Berechnungen wie Aggregatfunktionen durch, tun dies jedoch über eine Reihe von Zeilen, die sich auf die aktuelle Zeile beziehen. Während eine Aggregatfunktion wahrscheinlich ein einzelnes Ergebnis liefert, indem sie an einer Spalte arbeitet, liefert eine Fensterfunktion eher ein Ergebnis für jede Zeile.

Die Klassifizierung der SQL Server-Funktionen kann auch auf dem Datentyp basieren – Zeichenfolgenfunktionen, numerische Funktionen und Datumsfunktionen. Wir können ableiten, dass String-Funktionen mit String-Werten arbeiten, z. B. LENGTH().

MIN &MAX

Die MIN- und MAX-Funktionen sind sehr einfache Aggregatfunktionen. Dennoch können sie je nach Datensatz, mit dem wir es zu tun haben, eine Vielzahl von Fragen beantworten.

Wenn wir beispielsweise die SELECT-Anweisung absetzen, stellen wir dem SQL Server eine Frage . Daher sagen wir, dass wir eine Abfrage ausführen . Um SQL Server nach den Mindest- und Höchstwerten in einer Spalte zu fragen, verwenden wir die folgende Syntax:

SELECT MIN(column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;

Wenn wir diese Syntax verwenden, gibt SQL Server einen einzelnen Wert zurück. Daher können wir die Funktionen MIN() und MAX() als skalare Funktionen betrachten.

Listing 1 zeigt die einfache Anweisung, um die Minimal- und Maximalwerte zum Frachtgewicht aus den Sales.Orders abzuleiten Tabelle von TSQLV4 von Itzik Bengan Datenbank:

-- Listing 1: Basic MIN() and MAX() Function Queries
USE TSQLV4
GO
SELECT * FROM [Sales].[Orders];

-- Without Column Aliases
SELECT MIN(freight) FROM [Sales].[Orders];
SELECT MAX(freight) FROM [Sales].[Orders];
-- Without Column Aliases
SELECT MIN(freight) min_freight FROM [Sales].[Orders];
SELECT MAX(freight) max_freight FROM [Sales].[Orders];

GRUPPE NACH

"Was sind die minimalen und maximalen Frachtgewichte pro Land?" Um diese Frage zu beantworten, benötigen wir das GROUP BY Klausel. Das Beispiel finden Sie in Listing 2 unten.

Die Abfrage gruppiert die Daten zunächst nach Schiffsland, und gibt dann das minimale und maximale Frachtgewicht pro Land zurück. Wir können dies bestätigen, indem wir die letzte Abfrage in der Auflistung ausgeben (Validierung).

-- Listing 2: MIN and MAX Freight By Country
-- Minimum by Country
SELECT shipcountry, MIN(freight) min_freight FROM [Sales].[Orders]
GROUP BY shipcountry;

-- Maximum by Country
SELECT shipcountry, MAX(freight) max_freight FROM [Sales].[Orders]
GROUP BY shipcountry;

-- Validation
SELECT * FROM [Sales].[Orders] WHERE shipcountry='Finland'
ORDER BY freight;

-- Listing 2: MIN and MAX Freight by Country
-- Minimum by Customer
SELECT custid, MIN(freight) min_freight FROM [Sales].[Orders]
GROUP BY custid;

-- Maximum by Customer
SELECT custid, MAX(freight) max_freight FROM [Sales].[Orders]
GROUP BY custid;


-- Validation
SELECT * FROM [Sales].[Orders] WHERE custid='23'
ORDER BY freight;

Abbildung 3 zeigt die Ergebnisse. Wir können etwas Ähnliches mit einer anderen Spalte machen – der custid Säule. In diesem Fall beantworten wir die Frage "Was ist die minimale und maximale Angst für jeden Kunden?"

Weitere Fragen

Wir können die Daten weiter untersuchen, um herauszufinden, welche Länder ein Frachtgewicht von weniger als 1 oder mehr als 800 haben. Wir tun dies mithilfe von HAVING -Klausel, die durch GROUP BY in Gruppen segmentierte Resultsets filtert Klausel.

-- Listing 3: Introducing the HAVING Clause
SELECT shipcountry, MIN(freight) min_freight FROM [Sales].[Orders]
GROUP BY shipcountry
HAVING MIN(freight)<1;

SELECT shipcountry, MAX(freight) max_freight FROM [Sales].[Orders]
GROUP BY shipcountry
HAVING MAX(freight)>800;

Arbeiten mit Datumsangaben

Wenn wir die Funktionen MIN() und MAX() auf Datumsangaben anwenden, erwarten wir, das früheste zu sehen und neueste Termine bzw. Schauen Sie sich die Beispiele an – die Daten werden intern im SQL Server als Integer gespeichert.

-- Listing 4: Working with Dates
SELECT MIN(orderdate) earliest_date FROM [Sales].[Orders];
SELECT MAX(orderdate) latest_date FROM [Sales].[Orders];

Wir können tiefer gehen, indem wir fragen, welcher Kunde die erste Bestellung aufgegeben hat und welcher Kunde die letzte Bestellung aufgegeben hat. Dafür verwenden wir den Code in Listing 5. Abbildung 6 zeigt, dass die custid 85 Kunde hat die früheste Bestellung ausgeführt, während die custid 9 Kunden haben die letzte Bestellung aufgegeben.

-- Listing 5: Customer Order Dates
SELECT custid, MIN(orderdate) earliest_date FROM [Sales].[Orders]
GROUP BY custid
ORDER BY earliest_date;

SELECT custid, MAX(orderdate) latest_date FROM [Sales].[Orders]
GROUP BY custid
ORDER BY latest_date desc;

Schlussfolgerung

In diesem Artikel haben wir kurz die Verwendung der Aggregatfunktionen MIN() und MAX() in SQL Server demonstriert. Die Rolle dieser Funktionen besteht darin, die Mindest- und Höchstwerte für einen bestimmten Bereich zurückzugeben, der in einer Tabellenspalte gespeichert ist.

Wir können weitere Fragen mit diesen Funktionen beantworten, indem wir sie mit anderen T-SQL-Befehlen wie den GROUP BY-, ORDER BY- und HAVING-Klauseln kombinieren.

Viele Tools vereinfachen und beschleunigen diese Aufgabenerfüllung, und Sie können jede Lösung wählen, die Ihren Anforderungen entspricht. Darunter führt SQL Complete von Devart alle notwendigen Manipulationen durch und bietet eine integrierte SSMS Grid Aggregate-Funktion, die MIN, MAX und AVG der ausgewählten Werte im Grid berechnet.