Поиск…


Синтаксис

  • Функция (выражение [ 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;


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow