sql >> Databáze >  >> RDS >> Sqlserver

MIN a MAX agregační funkce v SQL Server

Funkce serveru SQL

V databázových systémech obecně a na SQL Serveru konkrétně jsou funkce kusy kódu, které berou nula nebo jeden vstup a vracejí jeden výstup nebo pole.

Funkce s hodnotou tabulky, které jsou obvykle definované uživatelem, mohou vrátit pole, ale vestavěné funkce serveru SQL Server jsou obvykle funkce s hodnotou skalární. Třetí třídou funkcí v SQL Server jsou agregované funkce. Funkce MIN a MAX SQL Server jsou agregované funkce.

Funkce okna jsou relativně novou třídou. Provádějí výpočty jako agregační funkce, ale provádějí to přes sadu řádků souvisejících s aktuálním řádkem. Zatímco agregační funkce pravděpodobně poskytne jeden výsledek při práci na sloupci, funkce okna s větší pravděpodobností poskytne výsledek pro každý řádek.

Klasifikace funkcí serveru SQL může také vycházet z datového typu – funkce řetězců, číselné funkce a funkce data. Můžeme odvodit, že funkce řetězce pracují s hodnotami řetězce, např. LENGTH().

MIN A MAX

Funkce MIN a MAX jsou velmi jednoduché agregační funkce. Přesto mohou odpovědět na širokou škálu otázek v závislosti na souboru dat, se kterým se zabýváme.

Když například zadáme příkaz SELECT, položíme SQL Serveru otázku . Proto říkáme, že provádíme dotaz . Chcete-li se serveru SQL Server zeptat na minimální a maximální hodnoty ve sloupci, používáme následující syntaxi:

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

Když použijeme tuto syntaxi, SQL Server vrátí jednu hodnotu. Můžeme tedy uvažovat funkce MIN() a MAX() Skalárně hodnotné funkce.

Výpis 1 zobrazuje jednoduchý výpis pro odvození minimální a maximální hodnoty hmotnosti nákladu z Sales.Orders tabulka TSQLV4 Itzika Bengana databáze:

-- 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];

GROUP BY

„Jaké jsou minimální a maximální hmotnosti nákladu v jednotlivých zemích?“ K zodpovězení této otázky potřebujeme GROUP BY doložka. Příklad je ve výpisu 2 níže.

Dotaz nejprve seskupuje data podle země odeslání, a poté vrátí minimální a maximální hmotnosti nákladu pro každou zemi. Můžeme to potvrdit zadáním posledního dotazu ve výpisu (validace).

-- 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;

Obrázek 3 ukazuje výsledky. Něco podobného můžeme udělat s dalším sloupcem – custid sloupec. V tomto případě odpovídáme na otázku „Jaké je minimální a maximální zděšení pro každého zákazníka?“

Další otázky

Údaje můžeme dále zkoumat, abychom zjistili, které země mají hmotnost nákladu menší než 1 nebo větší než 800. To provedeme pomocí MÁT klauzule, která filtruje sady výsledků segmentované do skupin podle GROUP BY doložka.

-- 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;

Práce s daty

Při použití funkcí MIN() a MAX() na data očekáváme, že uvidíme nejstarší a nejnovější data resp. Podívejte se na příklady – data jsou interně na SQL Serveru uložena jako celá čísla.

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

Můžeme jít hlouběji, když se zeptáme, který zákazník provedl první objednávku a který poslední. K tomu používáme kód ve výpisu 5. Obrázek 6 ukazuje, že custid 85 zákazníků provedlo nejdříve objednávku, zatímco custid 9 zákazníků zadalo poslední objednávku.

-- 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;

Závěr

V tomto článku jsme stručně demonstrovali použití agregačních funkcí MIN() a MAX() na serveru SQL Server. Úlohou těchto funkcí je vracet minimální a maximální hodnoty pro daný rozsah uložené ve sloupci tabulky.

Pomocí těchto funkcí můžeme odpovědět na další otázky tím, že je zkombinujeme s dalšími příkazy T-SQL, jako jsou klauzule GROUP BY, ORDER BY a HAVING.

Spousta nástrojů zjednodušuje a urychluje takové plnění úkolů a můžete si vybrat jakékoli řešení, které vyhovuje vašim požadavkům. Mezi nimi SQL Complete od Devart provádí všechny potřebné manipulace a poskytuje přímou funkci SSMS Grid Aggregate, která vypočítává MIN, MAX a AVG vybraných hodnot v mřížce.


  1. Nemůžete použít dotaz LIKE v JDBC PreparedStatement?

  2. Smazání databázového poštovního účtu (SSMS)

  3. Zjistěte, do kterého čtvrtletí v Oracle patří datum

  4. OracleException (0x80004005) při připojování k databázi Oracle