SQL
Функции (Агрегат)
Поиск…
Синтаксис
- Функция (выражение [ DISTINCT ]) -DISTINCT является необязательным параметром
- AVG (выражение [ALL | DISTINCT])
- COUNT ({[ALL | DISTINCT] выражение] | *})
- GROUPING (<column_expression>)
- MAX (выражение [ALL | DISTINCT])
- MIN (выражение [ALL | DISTINCT])
- SUM (выражение [ALL | DISTINCT])
- VAR (выражение [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause) - VARP (выражение [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause - STDEV (выражение [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause) - STDEVP (выражение [ALL | DISTINCT])
OVER ([partition_by_clause] order_by_clause)
замечания
В управлении базой данных агрегированная функция представляет собой функцию, в которой значения нескольких строк группируются вместе как входные данные по определенным критериям для формирования единственного значения более значимого значения или измерения, такого как набор, сумка или список.
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.
Агрегатные функции используются для вычисления «возвращаемого столбца числовых данных» из
SELECT
. Они в основном суммируют результаты конкретного столбца выбранных данных. - SQLCourse2.com
Все агрегатные функции игнорируют значения NULL.
SUM
Sum
функции просуммировать значения всех строк в группе. Если предложение group by опущено, то суммирует все строки.
select sum(salary) TotalSalary
from employees;
TotalSalary |
---|
2500 |
select DepartmentId, sum(salary) TotalSalary
from employees
group by DepartmentId;
DepartmentID | TotalSalary |
---|---|
1 | 2000 |
2 | 500 |
Условная агрегация
Таблица платежей
Покупатель | Способ оплаты | Количество |
---|---|---|
Питер | кредит | 100 |
Питер | кредит | 300 |
Джон | кредит | 1000 |
Джон | Дебет | 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
Результат:
Покупатель | кредит | Дебет |
---|---|---|
Питер | 400 | 0 |
Джон | 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
Результат:
Покупатель | credit_transaction_count | debit_transaction_count |
---|---|---|
Питер | 2 | 0 |
Джон | 1 | 1 |
AVG ()
Агрегатная функция AVG () возвращает среднее значение данного выражения, обычно числовые значения в столбце. Предположим, у нас есть таблица, содержащая ежегодный расчет населения в городах по всему миру. Записи для Нью-Йорка выглядят примерно так:
ПРИМЕР ТАБЛИЦЫ
название города | Население | год |
---|---|---|
Нью-Йорк | 8550405 | 2015 |
Нью-Йорк | ... | ... |
Нью-Йорк | 8000906 | 2005 |
Чтобы выбрать среднее население Нью-Йорка, США из таблицы, содержащей названия городов, измерения численности населения и годы измерения за последние десять лет:
QUERY
select city_name, AVG(population) avg_population
from city_population
where city_name = 'NEW YORK CITY';
Обратите внимание, что год измерения отсутствует в запросе, поскольку население усредняется с течением времени.
РЕЗУЛЬТАТЫ
название города | avg_population |
---|---|
Нью-Йорк | 8250754 |
Примечание. Функция AVG () преобразует значения в числовые типы. Это особенно важно иметь в виду при работе с датами.
Конкатенация списка
Частичный кредит на этот ответ.
Список Concatenation объединяет столбец или выражение, объединяя значения в одну строку для каждой группы. Можно указать строку для разграничения каждого значения (либо пустую, либо запятую, когда она опущена), и порядок значений в результате. Хотя он не является частью стандарта SQL, каждый крупный поставщик реляционных баз данных поддерживает его по-своему.
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 и ранее
(CTE включен для поощрения принципа 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 и SQL Azure
SELECT ColumnA
, STRING_AGG(ColumnB, ',') WITHIN GROUP (ORDER BY ColumnB) AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
SQLite
без заказа:
SELECT ColumnA
, GROUP_CONCAT(ColumnB, ',') AS ColumnBs
FROM TableName
GROUP BY ColumnA
ORDER BY ColumnA;
для заказа требуется подзапрос или 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;
подсчитывать
Вы можете подсчитать количество строк:
SELECT count(*) TotalRows
FROM employees;
TotalRows |
---|
4 |
Или подсчитать сотрудников на отдел:
SELECT DepartmentId, count(*) NumEmployees
FROM employees
GROUP BY DepartmentId;
DepartmentID | NumEmployees |
---|---|
1 | 3 |
2 | 1 |
Вы можете рассчитывать на столбец / выражение с эффектом, который не будет считать значения NULL
:
SELECT count(ManagerId) mgr
FROM EMPLOYEES;
прил |
---|
3 |
(Существует один столбец Manager с нулевым значением)
Вы также можете использовать DISTINCT внутри другой функции, такой как COUNT, чтобы найти только члены DISTINCT набора для выполнения операции.
Например:
SELECT COUNT(ContinentCode) AllCount
, COUNT(DISTINCT ContinentCode) SingleCount
FROM Countries;
Вернет разные значения. SingleCount будет рассчитывать только отдельные континенты один раз, а AllCount будет включать в себя дубликаты.
ContinentCode |
---|
OC |
Евросоюз |
КАК |
Не Доступно |
Не Доступно |
AF |
AF |
AllCount: 7 SingleCount: 5
Максимум
Найти максимальное значение столбца:
select max(age) from employee;
Приведенный выше пример будет возвращать наибольшее значение для столбца age
из employee
таблицы.
Синтаксис:
SELECT MAX(column_name) FROM table_name;
Min
Найдите наименьшее значение столбца:
select min(age) from employee;
Приведенный выше пример будет возвращать наименьшее значение для столбца age
из employee
таблицы.
Синтаксис:
SELECT MIN(column_name) FROM table_name;