sql >> Database teknologi >  >> RDS >> Sqlserver

MIN og MAX samlede funktioner i SQL Server

SQL-serverfunktioner

I databasesystemer generelt og i SQL Server i særdeleshed er funktioner kodestykker, der tager nul eller ét input og returnerer et enkelt output eller et array.

Funktioner med tabelværdi, som typisk er brugerdefinerede, kan returnere et array, men indbyggede SQL Server-funktioner er typisk funktioner med skalarværdi. Den tredje klasse af funktioner i SQL Server er Aggregate-Valued Functions. MIN- og MAX SQL Server-funktionerne er aggregerede funktioner.

Vinduesfunktioner er en relativt ny klasse. De udfører beregninger som aggregerede funktioner, men gør det over et sæt rækker relateret til den aktuelle række. Mens en aggregeret funktion sandsynligvis vil give et enkelt resultat ved at arbejde på en kolonne, er det mere sandsynligt, at en vinduesfunktion vil give et resultat for hver række.

Klassifikationen af ​​SQL Server-funktioner kan også basere sig på datatype – strengfunktioner, numeriske funktioner og datofunktioner. Vi kan udlede, at strengfunktioner fungerer på strengværdier, f.eks. LENGTH().

MIN &MAX

MIN- og MAX-funktionerne er meget simple aggregerede funktioner. Alligevel kan de besvare en lang række spørgsmål afhængigt af det datasæt, vi har med at gøre.

Når vi f.eks. udsteder SELECT-sætningen, stiller vi SQL Server et spørgsmål . Derfor siger vi, at vi udfører en forespørgsel . For at spørge SQL Server om minimums- og maksimumværdierne i en kolonne, bruger vi følgende syntaks:

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

Når vi bruger denne syntaks, returnerer SQL Server en enkelt værdi. Således kan vi betragte MIN()- og MAX()-funktionerne Scalar-Valued Functions.

Liste 1 viser den enkle erklæring til at udlede minimums- og maksimumværdierne på fragtvægten fra Salg.Ordrer tabel over Itzik Bengans TSQLV4 database:

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

GRUPPER EFTER

"Hvad er minimums- og maksimumsvægten pr. land?" For at besvare dette spørgsmål har vi brug for GROUP BY klausul. Eksemplet er i liste 2 nedenfor.

Forespørgslen grupperer først dataene efter skibsland, og derefter returnerer den henholdsvis minimums- og maksimumsfragtvægten pr. land. Vi kan bekræfte dette ved at udstede den sidste forespørgsel i listen (validering).

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

Figur 3 viser resultaterne. Vi kan gøre noget lignende med en anden kolonne – custid kolonne. I dette tilfælde besvarer vi spørgsmålet, "Hvad er minimum og maksimum forskrækkelse for hver kunde?"

Flere spørgsmål

Vi kan undersøge dataene yderligere for at finde ud af, hvilke lande der har fragtvægte mindre end 1 eller mere end 800. Vi gør dette ved at bruge HAVING klausul, der filtrerer resultatsæt segmenteret i grupper efter GROUP BY klausul.

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

Arbejde med datoer

Når vi anvender funktionerne MIN() og MAX() på datoer, forventer vi at se den tidligste og seneste henholdsvis datoer. Tag et kig på eksemplerne – datoerne gemmes som heltal internt i SQL Server.

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

Vi kan grave dybere ved at spørge, hvilken kunde der lavede den første ordre, og hvilken kunde der lavede den seneste ordre. Til det bruger vi koden i liste 5. Figur 6 viser, at custid 85 kunder udførte den tidligste ordre, mens custid 9 kunder afgav den seneste ordre.

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

Konklusion

I denne artikel demonstrerede vi kort brugen af ​​MIN() og MAX() aggregerede funktioner i SQL Server. Disse funktioners rolle er at returnere minimum- og maksimumværdierne for et givet område, der er gemt i en tabelkolonne.

Vi kan besvare flere spørgsmål med disse funktioner ved at kombinere dem med andre T-SQL-kommandoer såsom GROUP BY, ORDER BY og HAVING-sætningerne.

Masser af værktøjer forenkler og fremskynder en sådan opgaveudførelse, og du kan vælge enhver løsning, der opfylder dine krav. Blandt dem udfører SQL Complete fra Devart alle de nødvendige manipulationer og leverer en in-place SSMS Grid Aggregate-funktion, der beregner MIN, MAX og AVG af de valgte værdier i gitteret.


  1. Timeout for OracleDataReader.Read-metoden

  2. Boolean Field i Oracle

  3. MySQL:ÆNDRE TABEL, hvis kolonne ikke eksisterer

  4. varbinær til streng på SQL Server