SQL
Funktioner (Aggregat)
Sök…
Syntax
- Funktion ([ DISTINCT ] -uttryck) -DISTINCT är en valfri parameter
- AVG ([ALL | DISTINCT] uttryck)
- COUNT ({[ALL | DISTINCT] expression] | *})
- Gruppering (<column_expression>)
- MAX ([ALL | DISTINCT] uttryck)
- MIN ([ALL | DISTINCT] uttryck)
- SUM ([ALL | DISTINCT] uttryck)
- VAR ([ALL | DISTINCT] uttryck)
OVER ([partition_by_clause] order_by_clause) - VARP ([ALL | DISTINCT] uttryck)
OVER ([partition_by_clause] order_by_clause - STDEV ([ALL | DISTINCT] uttryck)
OVER ([partition_by_clause] order_by_clause) - STDEVP ([ALL | DISTINCT] uttryck)
OVER ([partition_by_clause] order_by_clause)
Anmärkningar
I databashantering är en sammanlagd funktion en funktion där värdena för flera rader grupperas tillsammans som inmatning på vissa kriterier för att bilda ett enda värde av mer betydande betydelse eller mätning som en uppsättning, en påse eller en lista.
MIN returns the smallest value in a given column
MAX returns the largest value in a given column
SUM returns the sum of the numeric values in a given column
AVG returns the average value of a given column
COUNT returns the total number of values in a given column
COUNT(*) returns the number of rows in a table
GROUPING Is a column or an expression that contains a column in a GROUP BY clause.
STDEV returns the statistical standard deviation of all values in the specified expression.
STDEVP returns the statistical standard deviation for the population for all values in the specified expression.
VAR returns the statistical variance of all values in the specified expression. may be followed by the OVER clause.
VARP returns the statistical variance for the population for all values in the specified expression.
Samlade funktioner används för att beräkna mot en "returnerad kolumn med numerisk data" från ditt
SELECT
uttalande. De sammanfattar i princip resultaten från en viss kolumn med utvalda data. - SQLCourse2.com
Alla aggregerade funktioner ignorerar NULL-värden.
SUMMA
Sum
summerar värdet på alla rader i gruppen. Om gruppen enligt klausul utelämnas summerar alla raderna.
select sum(salary) TotalSalary
from employees;
TotalSalary |
---|
2500 |
select DepartmentId, sum(salary) TotalSalary
from employees
group by DepartmentId;
DepartmentId | TotalSalary |
---|---|
1 | 2000 |
2 | 500 |
Villkorlig aggregering
Betalningstabell
Kund | Betalnings typ | Belopp |
---|---|---|
Peter | Kreditera | 100 |
Peter | Kreditera | 300 |
John | Kreditera | 1000 |
John | Debitera | 500 |
select customer,
sum(case when payment_type = 'credit' then amount else 0 end) as credit,
sum(case when payment_type = 'debit' then amount else 0 end) as debit
from payments
group by customer
Resultat:
Kund | Kreditera | Debitera |
---|---|---|
Peter | 400 | 0 |
John | 1000 | 500 |
select customer,
sum(case when payment_type = 'credit' then 1 else 0 end) as credit_transaction_count,
sum(case when payment_type = 'debit' then 1 else 0 end) as debit_transaction_count
from payments
group by customer
Resultat:
Kund | credit_transaction_count | debit_transaction_count |
---|---|---|
Peter | 2 | 0 |
John | 1 | 1 |
AVG ()
Den samlade funktionen AVG () returnerar medelvärdet för ett givet uttryck, vanligtvis numeriska värden i en kolumn. Antag att vi har en tabell som innehåller den årliga befolkningsberäkningen i städer över hela världen. Posterna för New York City ser ut som de nedan:
EXEMPELBORD
Stadens namn | befolkning | år |
---|---|---|
New York City | 8.550.405 | 2015 |
New York City | ... | ... |
New York City | 8.000.906 | 2005 |
För att välja den genomsnittliga befolkningen i New York City, USA från en tabell som innehåller stadnamn, befolkningsmätningar och mätår under de senaste tio åren:
FRÅGA
select city_name, AVG(population) avg_population
from city_population
where city_name = 'NEW YORK CITY';
Lägg märke till hur mätåret saknas från frågan eftersom befolkningen beräknas i genomsnitt över tiden.
RESULTAT
Stadens namn | avg_population |
---|---|
New York City | 8.250.754 |
Obs: funktionen AVG () konverterar värden till numeriska typer. Detta är särskilt viktigt att komma ihåg när du arbetar med datum.
Lista sammankoppling
Partiell kredit till detta SO-svar.
Lista sammanlänkning samlar en kolumn eller ett uttryck genom att kombinera värdena i en enda sträng för varje grupp. En sträng för att avgränsa varje värde (antingen tomt eller komma när det utelämnas) och ordningen på värdena i resultatet kan anges. Även om det inte ingår i SQL-standarden, stöder varje större relationsdatabasleverantör den på sitt eget sätt.
MySQL
SELECT ColumnA
, GROUP_CONCAT(ColumnB ORDER BY ColumnB SEPARATOR ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
Oracle & DB2
SELECT ColumnA
, LISTAGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
PostgreSQL
SELECT ColumnA
, STRING_AGG(ColumnB, ',' ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQL Server
SQL Server 2016 och tidigare
(CTE ingår för att uppmuntra DRY-principen )
WITH CTE_TableName AS (
SELECT ColumnA, ColumnB
FROM TableName)
SELECT t0.ColumnA
, STUFF((
SELECT ',' + t1.ColumnB
FROM CTE_TableName t1
WHERE t1.ColumnA = t0.ColumnA
ORDER BY t1.ColumnB
FOR XML PATH('')), 1, 1, '') AS ColumnBs
FROM CTE_TableName t0
GROUP BY t0.ColumnA
ORDER BY ColumnA;
SQL Server 2017 och SQL Azure
SELECT ColumnA
, STRING_AGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQLite
utan att beställa:
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
beställning kräver en subfråga eller CTE:
WITH CTE_TableName AS (
SELECT ColumnA, ColumnB
FROM TableName
ORDER BY ColumnA, ColumnB)
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM CTE_TableName
GROUP BY ColumnA
ORDER BY ColumnA;
Räkna
Du kan räkna antalet rader:
SELECT count(*) TotalRows
FROM employees;
TotalRows |
---|
4 |
Eller räkna medarbetarna per avdelning:
SELECT DepartmentId, count(*) NumEmployees
FROM employees
GROUP BY DepartmentId;
DepartmentId | NumEmployees |
---|---|
1 | 3 |
2 | 1 |
Du kan räkna över en kolumn / uttryck med effekten som inte räknar NULL
värdena:
SELECT count(ManagerId) mgr
FROM EMPLOYEES;
mgr |
---|
3 |
(Det finns en kolumn med nollvärdehanteraren)
Du kan också använda DISTINCT inuti en annan funktion, t.ex. COUNT, för att bara hitta DISTINCT- medlemmarna i uppsättningen för att utföra operationen på.
Till exempel:
SELECT COUNT(ContinentCode) AllCount
, COUNT(DISTINCT ContinentCode) SingleCount
FROM Countries;
Returnerar olika värden. SingleCount räknar endast enskilda kontinenter en gång, medan AllCount kommer att innehålla duplikat.
ContinentCode |
---|
OC |
EU |
SOM |
NA |
NA |
AF |
AF |
AllCount: 7 SingleCount: 5
Max
Hitta kolumnens maximala värde:
select max(age) from employee;
Ovanstående exempel kommer att återvända största värdet för kolumn age
av employee
bord.
Syntax:
SELECT MAX(column_name) FROM table_name;
min
Hitta det minsta värdet på kolumnen:
select min(age) from employee;
Ovanstående exempel kommer att återvända minsta värdet för kolumn age
av employee
bord.
Syntax:
SELECT MIN(column_name) FROM table_name;