Funkcje serwera SQL
W systemach baz danych ogólnie, aw szczególności w SQL Server, funkcje to fragmenty kodu, które pobierają zero lub jedno wejście i zwracają pojedyncze wyjście lub tablicę.
Funkcje o wartościach przechowywanych w tabeli, które są zwykle zdefiniowane przez użytkownika, mogą zwracać tablicę, ale wbudowane funkcje programu SQL Server są zazwyczaj funkcjami o wartościach skalarnych. Trzecią klasą funkcji w SQL Server są funkcje o wartościach agregowanych. Funkcje MIN i MAX SQL Server są funkcjami o wartościach agregowanych.
Funkcje okien to stosunkowo nowa klasa. Wykonują obliczenia, takie jak funkcje agregujące, ale robią to na zestawie wierszy związanych z bieżącym wierszem. Podczas gdy funkcja agregująca może dać pojedynczy wynik, pracując na kolumnie, funkcja okna z większym prawdopodobieństwem da wynik dla każdego wiersza.
Klasyfikacja funkcji SQL Server może również opierać się na typie danych — funkcjach ciągów, funkcjach liczbowych i funkcjach daty. Możemy wywnioskować, że funkcje ciągów operują na wartościach ciągów, np. LENGTH().
MIN i MAX
Funkcje MIN i MAX to bardzo proste funkcje agregujące. Mimo to mogą odpowiedzieć na wiele różnych pytań w zależności od zestawu danych, z którym mamy do czynienia.
Na przykład, kiedy wydajemy instrukcję SELECT, pytamy SQL Server o pytanie . Dlatego mówimy, że wykonujemy zapytanie . Aby zapytać SQL Server o minimalną i maksymalną wartość w kolumnie, używamy następującej składni:
SELECT MIN(column_name) FROM table_name;
SELECT MAX(column_name) FROM table_name;
Kiedy używamy tej składni, SQL Server zwraca pojedynczą wartość. Dlatego możemy rozważyć funkcje MIN() i MAX() Funkcje o wartościach skalarnych.
Listing 1 przedstawia proste stwierdzenie, które pozwala uzyskać minimalną i maksymalną wartość wagi ładunku z Sales.Orders tabela TSQLV4 Itzika Bengana baza danych:
-- 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];
GRUPAJ WG
„Jaka jest minimalna i maksymalna waga ładunku w danym kraju?” Aby odpowiedzieć na to pytanie, potrzebujemy GROUP BY klauzula. Przykład znajduje się na liście 2 poniżej.
Zapytanie najpierw grupuje dane według kraju wysyłki, a następnie zwraca odpowiednio minimalną i maksymalną wagę frachtu na kraj. Możemy to potwierdzić, wysyłając ostatnie zapytanie na liście (walidacja).
-- 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;
Rysunek 3 przedstawia wyniki. Możemy zrobić coś podobnego z inną kolumną – custid kolumna. W tym przypadku odpowiadamy na pytanie „Jaka jest minimalna i maksymalna wartość strachu dla każdego klienta?”
Więcej pytań
Możemy dokładniej zbadać dane, aby dowiedzieć się, w których krajach waga ładunku jest mniejsza niż 1 lub większa niż 800. Robimy to za pomocą POSIADAJĄC klauzula filtrująca wyniki podzielone na grupy według GROUP BY klauzula.
-- 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;
Praca z datami
Stosując funkcje MIN() i MAX() do dat, spodziewamy się zobaczyć najwcześniejszy i najnowsze daty odpowiednio. Spójrz na przykłady – daty są przechowywane jako liczby całkowite wewnętrznie w SQL Server.
-- Listing 4: Working with Dates
SELECT MIN(orderdate) earliest_date FROM [Sales].[Orders];
SELECT MAX(orderdate) latest_date FROM [Sales].[Orders];
Możemy sięgnąć głębiej, pytając, który klient złożył pierwsze zamówienie, a który ostatnie. W tym celu używamy kodu z Listingu 5. Rysunek 6 pokazuje, że custid 85 klient wykonał najwcześniejsze zamówienie, a custid 9 klientów złożyło najnowsze zamówienie.
-- 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;
Wniosek
W tym artykule krótko zademonstrowaliśmy użycie funkcji agregujących MIN() i MAX() w SQL Server. Rolą tych funkcji jest zwracanie wartości minimalnych i maksymalnych dla danego zakresu przechowywanego w kolumnie tabeli.
Możemy odpowiedzieć na więcej pytań za pomocą tych funkcji, łącząc je z innymi poleceniami T-SQL, takimi jak klauzule GROUP BY, ORDER BY i HAVING.
Wiele narzędzi ułatwia i przyspiesza wykonywanie takich zadań, a Ty możesz wybrać dowolne rozwiązanie, które spełnia Twoje wymagania. Wśród nich SQL Complete firmy Devart wykonuje wszystkie niezbędne manipulacje i zapewnia lokalną funkcję agregacji siatki SSMS, która oblicza MIN, MAX i AVG wybranych wartości w siatce.