Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Funkcje agregujące MIN i MAX w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przenosić pliki danych w SQL Server — część 1

  2. Samouczki dotyczące bazy danych SQL Server ( MSSQL DBA ) dla początkujących Administratorzy baz danych

  3. Zaktualizuj wartość klucza podstawowego za pomocą struktury encji

  4. „Zapytanie niedozwolone w Waitfor” Błąd 101 w SQL Server

  5. Implementacja wyszukiwania pełnotekstowego w SQL Server 2016 dla zaawansowanych użytkowników