SQL
Funciones (Agregado)
Buscar..
Sintaxis
- Función (expresión [ DISTINCT ]) -DISTINCT es un parámetro opcional
- AVG ([ALL | DISTINCT] expresión)
- COUNT ({[ALL | DISTINCT] expresión] | *})
- AGRUPACIÓN (<column_expression>)
- MAX (expresión [ALL | DISTINCT])
- MIN ([ALL | DISTINCT] expresión)
- SUM ([ALL | DISTINCT] expresión)
- VAR ([ALL | DISTINCT] expresión)
OVER ([partition_by_clause] order_by_clause) - VARP ([ALL | DISTINCT] expresión)
OVER ([partition_by_clause] order_by_clause - STDEV ([ALL | DISTINCT] expresión)
OVER ([partition_by_clause] order_by_clause) - STDEVP ([ALL | DISTINCT] expresión)
OVER ([partition_by_clause] order_by_clause)
Observaciones
En la gestión de bases de datos, una función agregada es una función en la que los valores de varias filas se agrupan como entrada en ciertos criterios para formar un valor único de significado más significativo o medición, como un conjunto, una bolsa o una 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.
Las funciones agregadas se utilizan para calcular una "columna de datos numéricos devueltos" de su declaración
SELECT
. Básicamente, resumen los resultados de una columna particular de datos seleccionados. - SQLCourse2.com
Todas las funciones agregadas ignoran los valores NULL.
SUMA
Sum
función suma del valor de todas las filas del grupo. Si se omite el grupo por cláusula, se suman todas las filas.
select sum(salary) TotalSalary
from employees;
Salario total |
---|
2500 |
select DepartmentId, sum(salary) TotalSalary
from employees
group by DepartmentId;
DepartmentId | Salario total |
---|---|
1 | 2000 |
2 | 500 |
Agregación condicional
Tabla de pagos
Cliente | Tipo de pago | Cantidad |
---|---|---|
Peter | Crédito | 100 |
Peter | Crédito | 300 |
Juan | Crédito | 1000 |
Juan | Débito | 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
Resultado:
Cliente | Crédito | Débito |
---|---|---|
Peter | 400 | 0 |
Juan | 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
Resultado:
Cliente | credit_transaction_count | debit_transaction_count |
---|---|---|
Peter | 2 | 0 |
Juan | 1 | 1 |
AVG ()
La función agregada AVG () devuelve el promedio de una expresión dada, generalmente valores numéricos en una columna. Supongamos que tenemos una tabla que contiene el cálculo anual de la población en ciudades de todo el mundo. Los registros de la ciudad de Nueva York son similares a los de abajo:
Tabla de ejemplo
Nombre de la ciudad | población | año |
---|---|---|
Nueva York | 8.550.405 | 2015 |
Nueva York | ... | ... |
Nueva York | 8,000,906 | 2005 |
Para seleccionar la población promedio de la ciudad de Nueva York, EE. UU. De una tabla que contiene nombres de ciudades, mediciones de población y años de medición de los últimos diez años:
CONSULTA
select city_name, AVG(population) avg_population
from city_population
where city_name = 'NEW YORK CITY';
Observe cómo el año de medición está ausente de la consulta, ya que la población se promedia a lo largo del tiempo.
RESULTADOS
Nombre de la ciudad | avg_population |
---|---|
Nueva York | 8.250.754 |
Nota: La función AVG () convertirá los valores a tipos numéricos. Esto es especialmente importante tenerlo en cuenta al trabajar con fechas.
Concatenación de listas
Crédito parcial a esta respuesta.
Enumerar concatenación agrega una columna o expresión combinando los valores en una sola cadena para cada grupo. Se puede especificar una cadena para delimitar cada valor (ya sea en blanco o una coma cuando se omite) y el orden de los valores en el resultado. Si bien no es parte del estándar de SQL, todos los principales proveedores de bases de datos relacionales lo admiten a su manera.
MySQL
SELECT ColumnA
, GROUP_CONCAT(ColumnB ORDER BY ColumnB SEPARATOR ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
Oracle y 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;
servidor SQL
SQL Server 2016 y anteriores
(CTE incluido para alentar el principio DRY )
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 y SQL Azure
SELECT ColumnA
, STRING_AGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQLite
sin pedir:
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
el pedido requiere una subconsulta o 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;
Contar
Puedes contar el número de filas:
SELECT count(*) TotalRows
FROM employees;
TotalRows |
---|
4 |
O contar a los empleados por departamento:
SELECT DepartmentId, count(*) NumEmployees
FROM employees
GROUP BY DepartmentId;
DepartmentId | Numemployees |
---|---|
1 | 3 |
2 | 1 |
Puede contar sobre una columna / expresión con el efecto que no contará los valores NULL
:
SELECT count(ManagerId) mgr
FROM EMPLOYEES;
monseñor |
---|
3 |
(Hay una columna de ID de administrador de valor nulo)
También puede utilizar DISTINCT dentro de otra función, como COUNT, para buscar solo los miembros DISTINCT del conjunto para realizar la operación.
Por ejemplo:
SELECT COUNT(ContinentCode) AllCount
, COUNT(DISTINCT ContinentCode) SingleCount
FROM Countries;
Volverá valores diferentes. SingleCount solo contará los Continentes individuales una vez, mientras que AllCount incluirá duplicados.
Código Continente |
---|
jefe |
UE |
COMO |
N / A |
N / A |
AF |
AF |
AllCount: 7 SingleCount: 5
Max
Encuentra el valor máximo de columna:
select max(age) from employee;
El ejemplo anterior devolverá el mayor valor para la age
de la columna de employee
tabla de employee
.
Sintaxis:
SELECT MAX(column_name) FROM table_name;
Min
Encuentra el valor más pequeño de la columna:
select min(age) from employee;
El ejemplo anterior devolverá el valor más pequeño para la age
de la columna de employee
tabla de employee
.
Sintaxis:
SELECT MIN(column_name) FROM table_name;