Агрегатные функции в sql: Агрегатные функции (Transact-SQL) — SQL Server
Агрегатные функции (Transact-SQL) — SQL Server
-
- Чтение занимает 2 мин
В этой статье
Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data Warehouse
Агрегатная функция выполняет вычисление на наборе значений и возвращает одиночное значение. An aggregate function performs a calculation on a set of values, and returns a single value. Агрегатные функции, за исключением COUNT(*)
, не учитывают значения NULL.Except for COUNT(*)
, aggregate functions ignore null values. Агрегатные функции часто используются в выражении GROUP BY инструкции SELECT.Aggregate functions are often used with the GROUP BY clause of the SELECT statement.
Все агрегатные функции являются детерминированными.All aggregate functions are deterministic. Другими словами, агрегатные функции возвращают одну и ту же величину при каждом их вызове на одном и том же наборе входных значений.In other words, aggregate functions return the same value each time that they are called, when called with a specific set of input values. Дополнительные сведения о детерминированности функций см. в статье Детерминированные и недетерминированные функции.See Deterministic and Nondeterministic Functions for more information about function determinism. Предложение OVER может следовать за всеми агрегатными функциями, кроме STRING_AGG, GROUPING или GROUPING_ID. The OVER clause may follow all aggregate functions, except the STRING_AGG, GROUPING or GROUPING_ID functions.
Агрегатные функции можно использовать в качестве выражений только в следующих случаях.Use aggregate functions as expressions only in the following situations:
- Список выбора инструкции SELECT (вложенный или внешний запрос).The select list of a SELECT statement (either a subquery or an outer query).
- Предложение HAVING.A HAVING clause.
Transact-SQLTransact-SQL предоставляет следующие агрегатные функции.provides the following aggregate functions:
См. также разделSee also
Встроенные функции (Transact-SQL)Built-in Functions (Transact-SQL)
Предложение OVER (Transact-SQL)OVER Clause (Transact-SQL)
MAX (Transact-SQL) — SQL Server
-
000Z» data-article-date-source=»ms.date»>08/23/2017 - Чтение занимает 2 мин
В этой статье
Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data Warehouse
Возвращает максимальное значение выражения. Returns the maximum value in the expression.
Синтаксические обозначения в Transact-SQLTransact-SQL Syntax Conventions
СинтаксисSyntax
-- Aggregation Function Syntax
MAX( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
MAX ([ ALL ] expression) OVER ( [ <partition_by_clause> ] [ <order_by_clause> ] )
АргументыArguments
ALLALL
Применяет агрегатную функцию ко всем значениям.Applies the aggregate function to all values. ALL является параметром по умолчанию.ALL is the default.
DISTINCTDISTINCT
Указывает, что учитывается каждое уникальное значение.Specifies that each unique value is considered. Параметр DISTINCT не имеет смысла при использовании функцией MAX и доступен только для совместимости со стандартом ISO.DISTINCT is not meaningful with MAX and is available for ISO compatibility only.
expressionexpression
Может быть константой, именем столбца или функцией, а также любым сочетанием арифметических, побитовых и строковых операторов. Is a constant, column name, or function, and any combination of arithmetic, bitwise, and string operators. MAX можно использовать со столбцами numeric, character, uniqueidentifier и datetime, но не со столбцами bit.MAX can be used with numeric, character, uniqueidentifier, and datetime columns, but not with bit columns. Агрегатные функции и вложенные запросы не допускаются.Aggregate functions and subqueries are not permitted.
Дополнительные сведения см. в разделе Выражения (Transact-SQL).For more information, see Expressions (Transact-SQL).
OVER ( [ partition_by_clause ] order_by_clause )OVER ( [ partition_by_clause ] order_by_clause)
partition_by_clause делит результирующий набор, полученный с помощью предложения FROM, на секции, к которым применяется функция. partition_by_clause divides the result set produced by the FROM clause into partitions to which the function is applied. Если этот параметр не указан, функция обрабатывает все строки результирующего набора запроса как отдельные группы.If not specified, the function treats all rows of the query result set as a single group. order_by_clause определяет логический порядок, в котором выполняется операция.order_by_clause determines the logical order in which the operation is performed. Аргумент order_by_clause является обязательным.order_by_clause is required. Дополнительные сведения см. в статье Предложение OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).
Типы возвращаемых данныхReturn Types
Возвращает то же значение, что и expression.Returns a value same as expression.
КомментарииRemarks
При выполнении функции MAX все значения NULL пропускаются.MAX ignores any null values.
MAX возвращает NULL, если нет строк для выбора.MAX returns NULL when there is no row to select.
При использовании со столбцами, содержащими символьные значения, функция MAX находит наибольшее значение в упорядоченной последовательности.For character columns, MAX finds the highest value in the collating sequence.
MAX — это детерминированная функция, если она используется без предложений OVER и ORDER BY.MAX is a deterministic function when used without the OVER and ORDER BY clauses. Она не детерминирована при использовании с предложениями OVER и ORDER BY.It is nondeterministic when specified with the OVER and ORDER BY clauses. Дополнительные сведения см. в разделе Deterministic and Nondeterministic Functions.For more information, see Deterministic and Nondeterministic Functions.
ПримерыExamples
A.A. Простой примерSimple example
В следующем примере возвращается наибольший (максимальный) размер налога в базе данных AdventureWorks2012AdventureWorks2012. The following example returns the highest (maximum) tax rate in the AdventureWorks2012AdventureWorks2012 database.
SELECT MAX(TaxRate)
FROM Sales.SalesTaxRate;
GO
Результирующий набор:Here is the result set.
-------------------
19.60
Warning, null value eliminated from aggregate.
(1 row(s) affected)
Б.B. Использование предложения OVERUsing the OVER clause
В приведенном ниже примере рассматривается применение функций MIN, MAX, AVG и COUNT с предложением OVER для получения статистических значений для каждого из отделов в таблице HumanResources.Department
в базе данных AdventureWorks2012AdventureWorks2012.The following example uses the MIN, MAX, AVG, and COUNT functions with the OVER clause to provide aggregated values for each department in the HumanResources.Department
table in the AdventureWorks2012AdventureWorks2012 database.
SELECT DISTINCT Name
, MIN(Rate) OVER (PARTITION BY edh. DepartmentID) AS MinSalary
, MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary
, AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary
,COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept
FROM HumanResources.EmployeePayHistory AS eph
JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON eph.BusinessEntityID = edh.BusinessEntityID
JOIN HumanResources.Department AS d
ON d.DepartmentID = edh.DepartmentID
WHERE edh.EndDate IS NULL
ORDER BY Name;
Результирующий набор:Here is the result set.
Name MinSalary MaxSalary AvgSalary EmployeesPerDept
----------------------------- --------------------- --------------------- --------------------- ----------------
Document Control 10.25 17.7885 14.3884 5
Engineering 32.6923 63. 4615 40.1442 6
Executive 39.06 125.50 68.3034 4
Facilities and Maintenance 9.25 24.0385 13.0316 7
Finance 13.4615 43.2692 23.935 10
Human Resources 13.9423 27.1394 18.0248 6
Information Services 27.4038 50.4808 34.1586 10
Marketing 13.4615 37.50 18.4318 11
Production 6.50 84.1346 13.5537 195
Production Control 8.62 24.5192 16.7746 8
Purchasing 9.86 30.00 18.0202 14
Quality Assurance 10.5769 28. 8462 15.4647 6
Research and Development 40.8654 50.4808 43.6731 4
Sales 23.0769 72.1154 29.9719 18
Shipping and Receiving 9.00 19.2308 10.8718 6
Tool Design 8.62 29.8462 23.5054 6
(16 row(s) affected)
В.C. Использование MAX с символьными даннымиUsing MAX with character data
В приведенном ниже примере возвращается имя базы данных, которое является последним при сортировке по алфавиту.The following example returns the database name that sorts as the last name alphabetically. В нем используется WHERE database_id < 5
для обработки только системных баз данных.The example uses WHERE database_id < 5
, to consider only the system databases.
SELECT MAX(name) FROM sys. databases WHERE database_id < 5;
Последняя системная база данных — tempdb
.The last system database is tempdb
.
См. также:See Also
Агрегатные функции (Transact-SQL) Aggregate Functions (Transact-SQL)
Предложение OVER (Transact-SQL)OVER Clause (Transact-SQL)
VAR (Transact-SQL) — SQL Server
-
- Чтение занимает 2 мин
В этой статье
Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data WarehouseПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics Параллельное хранилище данныхParallel Data WarehouseПараллельное хранилище данныхParallel Data Warehouse
Возвращает статистическую дисперсию всех значений в указанном выражении. Returns the statistical variance of all values in the specified expression. За функцией может следовать предложение OVER.May be followed by the OVER clause.
Синтаксические обозначения в Transact-SQLTransact-SQL Syntax Conventions
СинтаксисSyntax
-- Aggregate Function Syntax
VAR ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
VAR ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
АргументыArguments
ALLALL
Применяет функцию ко всем значениям.Applies the function to all values. ALL является параметром по умолчанию.ALL is the default.
DISTINCTDISTINCT
Указывает, что учитывается каждое уникальное значение.Specifies that each unique value is considered.
expressionexpression
Выражение категории точного числового или приблизительного числового типа данных, за исключением типа данных bit.Is an expression of the exact numeric or approximate numeric data type category, except for the bit data type. Агрегатные функции и вложенные запросы не допускаются.Aggregate functions and subqueries are not permitted.
OVER ( [ partition_by_clause ] order_by_clause )OVER ( [ partition_by_clause ] order_by_clause)
partition_by_clause делит результирующий набор, полученный с помощью предложения FROM, на секции, к которым применяется функция.partition_by_clause divides the result set produced by the FROM clause into partitions to which the function is applied. Если этот параметр не указан, функция обрабатывает все строки результирующего набора запроса как отдельные группы.If not specified, the function treats all rows of the query result set as a single group. order_by_clause определяет логический порядок, в котором выполняется операция.order_by_clause determines the logical order in which the operation is performed. order_by_clause — это обязательный элемент. order_by_clause is required. Дополнительные сведения см. в статье Предложение OVER (Transact-SQL).For more information, see OVER Clause (Transact-SQL).
Типы возвращаемых данныхReturn Types
floatfloat
КомментарииRemarks
Если в инструкции SELECT функция VAR используется для всех элементов, то при вычислении учитывается каждое значение результирующего набора.If VAR is used on all items in a SELECT statement, each value in the result set is included in the calculation. Функцию VAR можно использовать только для числовых столбцов.VAR can be used with numeric columns only. Значения NULL пропускаются.Null values are ignored.
VAR — это детерминированная функция, если она используется без предложений OVER и ORDER BY.VAR is a deterministic function when used without the OVER and ORDER BY clauses. Она не детерминирована при использовании с предложениями OVER и ORDER BY.It is nondeterministic when specified with the OVER and ORDER BY clauses. Дополнительные сведения см. в разделе Deterministic and Nondeterministic Functions.For more information, see Deterministic and Nondeterministic Functions.
ПримерыExamples
А. Использование функции VARA: Using VAR
В следующем примере возвращается дисперсия для заполнения всех значений премии в таблице SalesPerson
в базе данных AdventureWorks2012AdventureWorks2012.The following example returns the variance for all bonus values in the SalesPerson
table in the AdventureWorks2012AdventureWorks2012 database.
SELECT VAR(Bonus)
FROM Sales.SalesPerson;
GO
Примеры: Azure Synapse AnalyticsAzure Synapse Analytics и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse AnalyticsAzure Synapse Analytics and Параллельное хранилище данныхParallel Data Warehouse
Б. Использование функции VARB: Using VAR
В приведенном ниже примере возвращается статистическая дисперсия для значений квот на продажу в таблице dbo. FactSalesQuota
.The following example returns the statistical variance of the sales quota values in the table dbo.FactSalesQuota
. Первый столбец содержит дисперсию всех уникальных значений, а второй — дисперсию всех значений, включая повторяющиеся.The first column contains the variance of all distinct values and the second column contains the variance of all values including any duplicates values.
-- Uses AdventureWorks
SELECT VAR(DISTINCT SalesAmountQuota)AS Distinct_Values, VAR(SalesAmountQuota) AS All_Values
FROM dbo.FactSalesQuota;
Результирующий набор:Here is the result set.
Distinct_Values All_Values
---------------- ----------------
159180469909.18 158762853821.10
В.C. Использование функции VAR с предложением OVERUsing VAR with OVER
В приведенном ниже примере возвращается статистическая дисперсия для значений квот на продажу в каждом квартале календарного года.The following example returns the statistical variance of the sales quota values for each quarter in a calendar year. Обратите внимание на то, что ORDER BY в предложении OVER упорядочивает статистическую дисперсию, а ORDER BY в инструкции SELECT упорядочивает результирующий набор.Notice that the ORDER BY in the OVER clause orders the statistical variance and the ORDER BY of the SELECT statement orders the result set.
-- Uses AdventureWorks
SELECT CalendarYear AS Year, CalendarQuarter AS Quarter, SalesAmountQuota AS SalesQuota,
VAR(SalesAmountQuota) OVER (ORDER BY CalendarYear, CalendarQuarter) AS Variance
FROM dbo.FactSalesQuota
WHERE EmployeeKey = 272 AND CalendarYear = 2002
ORDER BY CalendarQuarter;
Результирующий набор:Here is the result set.
Year Quarter SalesQuota Variance
---- ------- ---------------------- -------------------
2002 1 91000.0000 null
2002 2 140000.0000 1200500000.00
2002 3 70000.0000 1290333333.33
2002 4 154000.0000 1580250000. 00
См. также:See Also
Агрегатные функции (Transact-SQL) Aggregate Functions (Transact-SQL)
Предложение OVER (Transact-SQL)OVER Clause (Transact-SQL)
GROUPING (Transact-SQL) — SQL Server
-
- Чтение занимает 2 мин
В этой статье
Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics
Указывает, является ли указанное выражение столбца в списке GROUP BY статистическим или нет. Indicates whether a specified column expression in a GROUP BY list is aggregated or not. В результирующем наборе функция GROUPING возвращает 1 (статистическое выражение) или ноль (нестатистическое выражение).GROUPING returns 1 for aggregated or 0 for not aggregated in the result set. Функция GROUPING может использоваться только в списке SELECT <select>, предложениях HAVING и ORDER BY, если указано предложение GROUP BY.GROUPING can be used only in the SELECT <select> list, HAVING, and ORDER BY clauses when GROUP BY is specified.
Синтаксические обозначения в Transact-SQLTransact-SQL Syntax Conventions
СинтаксисSyntax
GROUPING ( <column_expression> )
АргументыArguments
<column_expression>
Столбец или выражение, которое содержит столбец в предложении GROUP BY.Is a column or an expression that contains a column in a GROUP BY clause.
Типы возвращаемых данныхReturn Types
tinyinttinyint
RemarksRemarks
GROUPING используется, чтобы различать значения NULL, возвращаемые операторами ROLLUP, CUBE или GROUPING SETS, и стандартные значения NULL. GROUPING is used to distinguish the null values that are returned by ROLLUP, CUBE or GROUPING SETS from standard null values. Возвращение NULL в качестве результата операции ROLLUP, CUBE или GROUPING SETS является особым случаем использования NULL.The NULL returned as the result of a ROLLUP, CUBE or GROUPING SETS operation is a special use of NULL. Значение служит заполнителем столбца в результирующем наборе и означает «все».This acts as a column placeholder in the result set and means all.
ПримерыExamples
В следующем примере производится группирование SalesQuota
и статистическая обработка сумм SaleYTD
в базе данных AdventureWorks2012AdventureWorks2012.The following example groups SalesQuota
and aggregates SaleYTD
amounts in the AdventureWorks2012AdventureWorks2012 database. Функция GROUPING
применяется к столбцу SalesQuota
.The GROUPING
function is applied to the SalesQuota
column.
SELECT SalesQuota, SUM(SalesYTD) 'TotalSalesYTD', GROUPING(SalesQuota) AS 'Grouping'
FROM Sales.SalesPerson
GROUP BY SalesQuota WITH ROLLUP;
GO
В результирующем наборе показаны два значения NULL в SalesQuota
.The result set shows two null values under SalesQuota
. Первый NULL
представляет группу значений NULL из этого столбца в таблице.The first NULL
represents the group of null values from this column in the table. Второй NULL
находится в строке итогов, добавленной операцией ROLLUP.The second NULL
is in the summary row added by the ROLLUP operation. Строка итогов содержит суммы TotalSalesYTD
для всех групп SalesQuota
и обозначается с помощью 1
в столбце Grouping
.The summary row shows the TotalSalesYTD
amounts for all SalesQuota
groups and is indicated by 1
in the Grouping
column.
Результирующий набор:Here is the result set.
SalesQuota TotalSalesYTD Grouping
------------ ----------------- --------
NULL 1533087.5999 0
250000.00 33461260.59 0
300000.00 9299677.9445 0
NULL 44294026.1344 1
(4 row(s) affected)
См. также:See Also
GROUPING_ID (Transact-SQL) GROUPING_ID (Transact-SQL)
GROUP BY (Transact-SQL)GROUP BY (Transact-SQL)
Агрегатные функции в SQL
Всем доброго времени суток, и давайте c вами рассмотрим основные агрегатные функции SQL на примерах.
Допустим у нас есть стандартная таблица с товарами и их ценами:
id tovar summa
========================================================
1 tovar1 1000
2 tovar2 10000
3 tovar3 2000
4 tovar4 1000
5 tovar5 3000
6 tovar6 3500
=========================================================
и первые функции которые мы с вами рассмотрим будут доставать из базы минимальное и максимальное значение поля summa:
SELECT MIN(`summa`), MAX(`summa`) FROM `tovar`
Как видите запрос нам вернул минимальное(1000) и максимальное(10000) значения поля summa из таблицы tovar. Это мы сделали благодаря использованию агрегатных функций MIN() и MAX(), то есть минимум и максимум, аргументом которых является поле из которого мы достаем значение.
С этим я думаю все понятно, поехали дальше.
Следующая функция которую мы с вами рассмотрим будет касаться суммы всех значений поля.
SELECT SUM(`summa`) FROM `tovar`
Результатом данного запроса будет общая сумма значений(20500) поля summa. И здесь мы использовали функцию SUM() аргументом которой было поле summa.
Функция COUNT() считает количество строк и в качестве ее аргумента мы можем использовать либо название поля или ‘*’.Рассмотрим на следующем запросе:
SELECT COUNT(`summa`) FROM `tovar`
и
SELECT COUNT(*) FROM `tovar`
как видите в обоих запросах нам вернулось значение 6, и это количество строк в таблице tovar.
Бывают ситуации когда нам необходимо получить среднее значение какого-нибудь поля.
Для этого существует функция AVG()
SELECT AVG(`summa`) FROM `tovar`
Результат 3416.6667 и мы можем это проверить используя уже полученные знания следующим запросом:
SELECT SUM(`summa`) / COUNT(`summa`) FROM `tovar`
Как видите результат у нас точно такой же 3416.6667 , то есть функция AVG() работает коректно.
И напоследок я хотел бы вам показать еще как избавиться от повторяющихся значений в полях. Допустим нам необходимо достать из таблицы tovar все категории цен , и как мы знаем у нас там есть повторяющиеся значения и для того чтобы их исключить. Существует специальное предложение DISTINCT, сразу оговорюсь это не функция.
Рассмотрим данное решение:
SELECT DISTINCT `summa` FROM `tovar`
Как видите нам из таблицы вернулись все наши категории цен товаров. И там нет повторяющихся значений!
Вот и все дорогие друзья! Думаю что данная статья была для вас полезна и вы узнали а ней что то новое, а если и нет, тогда освежили свои знания.
Всего доброго и удачи!
Вложенные агрегатные функции, Max (Avg()), in SQL
Я пишу этот запрос в SQL :
select MAX(AVG(salary) ) from employees group by department_id;
Сначала я получу группы по department_id
, но что будет дальше ?
sql
Поделиться
Источник
Ala Aga
10 июня 2013 в 18:02
4 ответа
14
Если у вас есть что-то подобное
EmployeeId DepartmentId Salary
1 1 10
2 1 30
3 2 30
4 2 40
5 2 20
6 3 40
7 3 50
после группировки
DepartmentId AVG(Salary)
1 (10+30)/2 = 20
2 (30+40+20)/3 = 30
3 (40+50)/2= 45
Таким образом, приведенный ниже запрос вернет 45 в качестве максимальной средней зарплаты для departmentId 3
SELECT MAX(x. avg)
FROM ( SELECT AVG(salary)as avg FROM employees group by department_id)x;
Поделиться
Nikola Mitev
10 июня 2013 в 18:10
4
Скорее всего, в зависимости от вашего RDBMS, это нужно будет сделать с помощью подзапроса
select max(AveragesByDept.avgSalary)
from (
select avgSalary=avg(salary)
from employees
group by department_id
) AveragesByDept
Поделиться
Brad
10 июня 2013 в 18:04
2
Вы можете сделать это, просто получив один ряд. Например:
select AVG(salary)
from employees
group by department_id
order by avg(salary) desc
limit 1
limit 1
может быть top 1
(SQL Server) или подзапросом с rownum = 1
(Oracle).
Поделиться
Gordon Linoff
10 июня 2013 в 18:12
- Поддерживает ли DynamoDB агрегатные функции, такие как AVG, MAX, MIN?
Я попробовал DynamoDB docs и работать с примером, используя QueryResult , я не смог найти ни одного источника, как использовать min, max и avg в DynamoDB (я использую Java API).
- Oracle sql вложенные агрегатные функции
Во вложенной агрегатной функции, использующей предложение group by ex max(avg (salary )) , первая зарплата вычисляется для каждого отдела, предполагая, что группировка выполняется по отделу, а затем выбирается максимальная из них . Теперь я не понимаю, как работает множественная агрегатная функция…
1
Это зависит от поддержки RDBMS, но если она будет поддержана, вы получите самую большую из средних по департаменту зарплату.
Группировка по применяется к внутреннему агрегату, а внешний агрегат не сгруппирован.
Поделиться
David Aldridge
10 июня 2013 в 18:05
Похожие вопросы:
Вложенные агрегатные функции с группировкой в postgresql
Я пытаюсь получить среднее значение сумм, используя вложенные агрегатные функции и группировку. То, что я хотел бы сделать, это: SELECT AVG(SUM(x) GROUP BY y) WHERE … GROUP BY …; То есть для…
Агрегатные функции MAX и AVG не работают с DATEDIFF в Hibernate HQL
Я использую Hibernate3, пытаясь выполнить следующий запрос HQL, он выдает следующие ошибки. Запрос: select MAX(DATEDIFF(SECOND, startTime, endTime)) from Service_Master…
SQL: агрегатные функции со столбцами типа DATE
Я наткнулся на вопрос (в тесте) о том, какие агрегатные функции применимы к столбцам типа DATE. Итак, как я понимаю, COUNT будет просто подсчитывать количество строк, а MIN и MAX возвращают самую. ..
используйте агрегатные функции [ выполнить расчет ] для столбца unicode sql server
У меня есть один столбец unicode nvarchar в базе данных sql server. Я храню числовые значения в этом столбце В моем локализованном Indian Language GUJARATI. Как я могу использовать агрегатные…
Ошибка на Deployment из SQL server 2008 R2 сообщает SQL Server 2008, что агрегатные функции не могут быть вложены в другие агрегатные функции
Я использовал SQL Server 2008 R2 для разработки своих отчетов, и когда я попытался развернуть его на хост-сервере, который является SQL server 2008, он показал ошибку при развертывании отчета,…
Поддерживает ли DynamoDB агрегатные функции, такие как AVG, MAX, MIN?
Я попробовал DynamoDB docs и работать с примером, используя QueryResult , я не смог найти ни одного источника, как использовать min, max и avg в DynamoDB (я использую Java API).
Oracle sql вложенные агрегатные функции
Во вложенной агрегатной функции, использующей предложение group by ex max(avg (salary )) , первая зарплата вычисляется для каждого отдела, предполагая, что группировка выполняется по отделу, а затем. ..
Как имитировать агрегатные функции avg, sum, max, min и count on PouchDB?
Кто-нибудь знает, как создавать агрегатные функции, например avg, sum, max и min в базе данных PouchDB? Я создал простое приложение для тестирования PouchDB. Я до сих пор не понял, как выполнять эти…
Агрегатные функции в наличии
Я понимаю, почему агрегатные функции должны использоваться в части наличия запроса, но не понимаю, почему два запроса ниже возвращают разные значения, т. е. что возвращает каждая из функций: SELECT…
Вложенные агрегатные функции
SELECT MAX(AVG(SYSDATE — inv_date)) FROM invoice; Что не так с этим запросом? Avg возвращает одно значение no Макс требует, чтобы группа работала над тем, чтобы она досент выполняла и выдавала…
17) Агрегатные функции — CoderLessons.com
Агрегатные функции — это все о
- Выполнение расчетов в несколько рядов
- Из одного столбца таблицы
- И возвращая единственное значение.
Стандарт ISO определяет пять (5) агрегатных функций, а именно:
1) COUNT
2) SUM
3) AVG
4) MIN
5) MAX
Зачем использовать агрегатные функции.
С точки зрения бизнеса разные уровни организации предъявляют разные информационные требования. Менеджеры высшего уровня, как правило, заинтересованы в знании целых цифр и не нуждаются в отдельных деталях.
> Агрегатные функции позволяют нам легко получать сводные данные из нашей базы данных.
Например, из нашей базы данных myflix, руководство может потребовать следующих отчетов
- Наименее арендованные фильмы.
- Самые арендованные фильмы.
- Среднее число, которое каждый фильм сдается в месяц.
Мы легко создаем вышеуказанные отчеты, используя агрегатные функции.
Давайте рассмотрим агрегатные функции подробно.
Функция COUNT
Функция COUNT возвращает общее количество значений в указанном поле. Он работает как с числовыми, так и с нечисловыми типами данных. Все агрегатные функции по умолчанию исключают нулевые значения перед работой с данными.
COUNT (*) — это специальная реализация функции COUNT, которая возвращает количество всех строк в указанной таблице. COUNT (*) также считает Null и дубликаты.
В приведенной ниже таблице показаны данные в таблице movierentals
номер ссылки | Дата сделки | Дата возвращения | членский номер | movie_id | фильм вернулся |
---|---|---|---|---|---|
11 | 20-06-2012 | ЗНАЧЕНИЕ NULL | 1 | 1 | 0 |
12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
15 | 23-06-2012 | ЗНАЧЕНИЕ NULL | 3 | 3 | 0 |
Давайте предположим, что мы хотим получить количество раз, когда фильм с идентификатором 2 был сдан в аренду
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
Выполнение вышеупомянутого запроса в MySQL Workbench против myflixdb дает нам следующие результаты.
DISTINCT Ключевое слово
Ключевое слово DISTINCT, которое позволяет нам исключать дубликаты из наших результатов. Это достигается путем группировки похожих значений вместе.
Чтобы оценить концепцию Distinct, давайте выполним простой запрос
SELECT `movie_id` FROM `movierentals`;
Теперь давайте выполним тот же запрос с отдельным ключевым словом —
SELECT DISTINCT `movie_id` FROM `movierentals`;
Как показано ниже, отчет об исключении повторяющихся записей из результатов.
Функция MIN
Функция MIN возвращает наименьшее значение в указанном поле таблицы .
В качестве примера, давайте предположим, что мы хотим знать год, в который был выпущен самый старый фильм в нашей библиотеке, мы можем использовать функцию MIN в MySQL, чтобы получить необходимую информацию.
Следующий запрос помогает нам достичь этого
SELECT MIN(`year_released`) FROM `movies`;
Выполнение вышеупомянутого запроса в MySQL Workbench против myflixdb дает нам следующие результаты.
Макс функция
Как следует из названия, функция MAX противоположна функции MIN. Он возвращает наибольшее значение из указанного поля таблицы .
Давайте предположим, что мы хотим получить год, когда был выпущен последний фильм в нашей базе данных. Мы можем легко использовать функцию MAX для достижения этой цели.
В следующем примере возвращается последний год выпуска фильма.
SELECT MAX(`year_released`) FROM `movies`;
Выполнение вышеуказанного запроса в MySQL Workbench с использованием myflixdb дает нам следующие результаты.
СУММА функция
Предположим, мы хотим получить отчет, в котором указана общая сумма выполненных платежей. Мы можем использовать функцию MySQL SUM, которая возвращает сумму всех значений в указанном столбце . SUM работает только с числовыми полями . Нулевые значения исключаются из возвращаемого результата.
В следующей таблице приведены данные в таблице платежей.
идентификатор платежа | членский номер | дата платежа | описание | выплаченная сумма | external_ reference_number |
---|---|---|---|---|---|
1 | 1 | 23.07.2012 | Оплата проката фильмов | 2500 | 11 |
2 | 1 | 25-07-2012 | Оплата проката фильмов | 2000 | 12 |
3 | 3 | 30-07-2012 | Оплата проката фильмов | 6000 | ЗНАЧЕНИЕ NULL |
Приведенный ниже запрос возвращает все выполненные платежи и суммирует их, чтобы получить единый результат.
SELECT SUM(`amount_paid`) FROM `payments`;
Выполнение вышеуказанного запроса в MySQL Workbench для myflixdb дает следующие результаты.
Функция AVG
Функция MySQL AVG возвращает среднее значение в указанном столбце . Как и функция SUM, она работает только с числовыми типами данных .
Предположим, мы хотим найти среднюю уплаченную сумму. Мы можем использовать следующий запрос —
SELECT AVG(`amount_paid`) FROM `payments`;
Выполнение вышеуказанного запроса в MySQL Workbench дает нам следующие результаты.
Резюме
- MySQL поддерживает все пять (5) стандартных агрегатных функций ISO COUNT, SUM, AVG, MIN и MAX.
- Функции SUM и AVG работают только с числовыми данными.
- Если вы хотите исключить повторяющиеся значения из результатов агрегатной функции, используйте ключевое слово DISTINCT. Ключевое слово ALL включает даже дубликаты. Если ничего не указано, по умолчанию принимается ALL.
- Агрегатные функции могут использоваться в сочетании с другими предложениями SQL, такими как GROUP BY
Логические
Вы думаете, что агрегатные функции просты. Попробуй это!
В следующем примере группируются участники по имени, подсчитывается общее количество платежей, средняя сумма платежей и общая сумма сумм платежей.
SELECT m.`full_names`,COUNT(p.`payment_id`) AS `paymentscount`,AVG(p.`amount_paid`) AS `averagepaymentamount`,SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;
Выполнение приведенного выше примера в MySQL Workbench дает нам следующие результаты.
ГРУППИРОВКА
(Transact-SQL) — SQL Server
- 2 минуты на чтение
В этой статье
Применимо к: SQL Server (все поддерживаемые версии) База данных SQL AzureAzure SQL Managed InstanceAzure Synapse Analytics
Указывает, является ли указанное выражение столбца в списке GROUP BY агрегированным или нет.GROUPING возвращает 1 для агрегированного значения или 0 для неагрегированного в наборе результатов. GROUPING может использоваться только в списках SELECT
Соглашения о синтаксисе Transact-SQL
Синтаксис
ГРУППИРОВКА (<выражение_столбца>)
Аргументы
Типы возврата
tinyint
Замечания
GROUPING используется для того, чтобы отличить нулевые значения, возвращаемые ROLLUP, CUBE или GROUPING SETS, от стандартных нулевых значений.NULL, возвращаемый в результате операций ROLLUP, CUBE или GROUPING SETS, является особым использованием NULL. Это действует как заполнитель столбца в наборе результатов и означает все.
Примеры
В следующем примере группируется SalesQuota
и суммируется SaleYTD
в базе данных AdventureWorks2012. Функция GROUPING
применяется к столбцу SalesQuota
.
ВЫБЕРИТЕ SalesQuota, SUM (SalesYTD) 'TotalSalesYTD', GROUPING (SalesQuota) AS 'Grouping'
ОТ ПРОДАЖ.Продавец
ГРУППА ПО КОЛИЧЕСТВУ ПРОДАЖ С ROLLUP;
ИДТИ
В наборе результатов показаны два нулевых значения под SalesQuota
. Первый NULL
представляет группу нулевых значений из этого столбца в таблице. Второй NULL
находится в итоговой строке, добавленной операцией ROLLUP. В итоговой строке показаны суммы TotalSalesYTD
для всех SalesQuota
групп и обозначены цифрой 1
в столбце Grouping
.
Вот результат.
Общая квота продаж
------------ ----------------- --------
ПУСТО 1533087.5999 0
250000,00 33461260,59 0
300000,00 9299677,9445 0
ПУСТО 44294026.1344 1
(Затронуты 4 строки)
См. Также
GROUPING_ID (Transact-SQL)
GROUP BY (Transact-SQL)
СУММ (Transact-SQL) — SQL Server
- 000Z» data-article-date-source=»ms.date»> 13.03.2017
- 4 минуты на чтение
В этой статье
Применимо к: SQL Server (все поддерживаемые версии) База данных SQL AzureAzure SQL Managed InstanceAzure Synapse Analytics Хранилище параллельных данных
Возвращает сумму всех значений или только значений DISTINCT в выражении.СУММ может использоваться только с числовыми столбцами. Нулевые значения игнорируются.
Соглашения о синтаксисе Transact-SQL
Синтаксис
- Синтаксис агрегатной функции
SUM ([ALL | DISTINCT] выражение)
- Синтаксис аналитических функций
SUM ([ALL] выражение) OVER ([partition_by_clause] order_by_clause)
Аргументы
ВСЕ
Применяет агрегатную функцию ко всем значениям. ВСЕ по умолчанию.
DISTINCT
Указывает, что СУММ возвращает сумму уникальных значений.
выражение
Константа, столбец или функция, а также любая комбинация арифметических, побитовых и строковых операторов. выражение является выражением категории точного числового или приблизительного числового типа данных, за исключением типа данных бит и . Агрегатные функции и подзапросы не допускаются. Дополнительные сведения см. В разделе Выражения (Transact-SQL).
OVER ( [ partition_by_clause ] order_by_clause )
partition_by_clause делит набор результатов, созданный предложением FROM, на разделы, к которым применяется функция.Если не указано, функция обрабатывает все строки набора результатов запроса как одну группу. order_by_clause определяет логический порядок, в котором выполняется операция. order_by_clause является обязательным. Дополнительные сведения см. В разделе Предложение OVER (Transact-SQL).
Типы возврата
Возвращает сумму всех значений выражения в наиболее точном типе данных выражение .
Результат выражения | Тип возврата |
---|---|
tinyint | внутренний |
smallint | внутренний |
внутренний | внутренний |
bigint | bigint |
десятичное категория (p, s) | десятичный (38, с) |
деньги и smallmoney категория | деньги |
float и real категория | поплавок |
Примечания
SUM является детерминированной функцией при использовании без предложений OVER и ORDER BY. Он недетерминирован, если указан в предложениях OVER и ORDER BY. Для получения дополнительной информации см. Детерминированные и недетерминированные функции.
Примеры
A. Использование SUM для возврата сводных данных
В следующих примерах показано использование функции СУММ для возврата сводных данных в базе данных AdventureWorks2012.
ВЫБРАТЬ Цвет, СУММ (ListPrice), СУММ (Стандартная стоимость)
ОТ ПРОИЗВОДСТВА.
ГДЕ Цвет НЕ ПУСТОЙ
И ListPrice! = 0.00
И назовите КАК "Mountain%"
ГРУППА ПО цвету
ЗАКАЗАТЬ ПО цвету;
ИДТИ
Вот результат.
Цвет
--------------- --------------------- -------------- -------
Черный 27404,84 5214,9616
Серебро 26462,84 14665,6792
Белый 19.00 6.7926
(3 строки затронуты)
B. Использование предложения OVER
В следующем примере функция SUM с предложением OVER используется для получения совокупной суммы годовых продаж для каждой территории в таблице Sales. SalesPerson
в базе данных AdventureWorks2012.Данные разделены по TerritoryID
и логически упорядочены по SalesYTD
. Это означает, что функция СУММ вычисляется для каждой территории на основе года продаж. Обратите внимание, что для TerritoryID
1 есть две строки за 2005 год продаж, представляющие двух продавцов с продажами в этом году. Для этих двух строк вычисляется совокупная сумма продаж, а затем в расчет включается третья строка, представляющая продажи за 2006 год.
ВЫБРАТЬ BusinessEntityID, TerritoryID
, DATEPART (yy, ModifiedDate) AS SalesYear
, ПРЕОБРАЗОВАТЬ (VARCHAR (20), SalesYTD, 1) AS SalesYTD
, ПРЕОБРАЗОВАТЬ (VARCHAR (20), AVG (SalesYTD) OVER (РАЗДЕЛЕНИЕ ПО TerritoryID)
ЗАКАЗ ПО DATEPART (гг, Дата изменения)
), 1) как MovingAvg
, CONVERT (VARCHAR (20), SUM (SalesYTD) OVER (РАЗДЕЛЕНИЕ ПО TerritoryID)
ЗАКАЗ ПО DATEPART (гг, Дата изменения)
), 1) AS CumulativeTotal
ОТ ПРОДАЖ. Продавец
ГДЕ TerritoryID НУЛЕВО ИЛИ TerritoryID <5
ЗАКАЗАТЬ ПО TerritoryID, SalesYear;
Вот результат.
BusinessEntityID TerritoryID Продажи Год Продажи YTD MovingAvg CumulativeTotal
---------------- ----------- ----------- ------------ -------- -------------------- --------------------
274 NULL 2005 559 697,56 559 697,56 559 697,56
287 NULL 2006 519 905.93 539 801,75 1 079 603,50
285 NULL 2007 172 524,45 417 375,98 1 252 127,95
283 1 2005 1,573 012,94 1,462 795,04 2 925 590,07
280 1 2005 1,352,577,13 1,462,795,04 2,925,590,07
284 1 2006 1,576,562,20 1,500,717,42 4,502,152,27
275 2 2005 3 763 178,18 3 763 178.18 3 763 178,18
277 3 2005 3 189 418,37 3 189 418,37 3 189 418,37
276 4 2005 4 251 368,55 3 354 952,08 6 709 904,17
281 4 2005 2,458,535,62 3,354,952,08 6,709,904,17
(Затронуты 10 строк)
В этом примере предложение OVER не включает PARTITION BY. Это означает, что функция будет применяться ко всем строкам, возвращаемым запросом. Предложение ORDER BY, указанное в предложении OVER, определяет логический порядок, к которому применяется функция SUM. Запрос возвращает совокупную сумму продаж по годам для всех территорий продаж, указанных в предложении WHERE. Предложение ORDER BY, указанное в операторе SELECT, определяет порядок, в котором отображаются строки запроса.
ВЫБРАТЬ BusinessEntityID, TerritoryID
, DATEPART (yy, ModifiedDate) AS SalesYear
, ПРЕОБРАЗОВАТЬ (VARCHAR (20), SalesYTD, 1) AS SalesYTD
, CONVERT (VARCHAR (20), AVG (SalesYTD) OVER (ORDER BY DATEPART (yy, ModifiedDate))
), 1) как MovingAvg
, CONVERT (VARCHAR (20), SUM (SalesYTD) OVER (ORDER BY DATEPART (yy, ModifiedDate))
), 1) AS CumulativeTotal
ОТ ПРОДАЖ.Продавец
ГДЕ TerritoryID НУЛЕВО ИЛИ TerritoryID <5
ЗАКАЗАТЬ ПО Году продаж;
Вот результат.
BusinessEntityID TerritoryID Продажи за год Продажи с начала года Движение за годСредний совокупный итог
---------------- ----------- ----------- ------------ -------- -------------------- --------------------
274 ПУСТО 2005 559 697,56 2449 684,05 17 147 788,35
275 2 2005 3763 178. 18 2449 684,05 17 147 788,35
276 4 2005 4 251 368,55 2449 684,05 17 147 788,35
277 3 2005 3 189 418,37 2449 684,05 17 147 788,35
280 1 2005 1,352,577,13 2,449,684,05 17,147,788,35
281 4 2005 2,458,535,62 2,449,684,05 17,147,788,35
283 1 2005 1573012,94 2449684.05 17 147 788,35
284 1 2006 1 576 562,20 2 138 250,72 19 244 256,47
287 NULL 2006 519 905,93 2 138 250,72 19 244 256,47
285 NULL 2007 172 524,45 1 941 678,09 19 416 780,93
(Затронуты 10 строк)
Примеры: Azure Synapse Analytics и хранилище параллельных данных
C. Простой пример SUM
В следующем примере возвращается общее количество каждого продукта, проданного в 2003 году.
- использует AdventureWorks
ВЫБЕРИТЕ ProductKey, СУММ (SalesAmount) как TotalPerProduct
ОТ dbo.FactInternetSales
ГДЕ OrderDateKey> = '20030101'
И OrderDateKey <'20040101'
ГРУППА ПО ProductKey
ЗАКАЗАТЬ ПО ProductKey;
Вот частичный набор результатов.
ProductKey TotalPerProduct
---------- ---------------
214 31421. 0200
217 31176.0900
222 29986.4300
225 7956.1500
Д.Расчет групповых итогов с более чем одним столбцом
В следующем примере вычисляется сумма значений ListPrice
и StandardCost
для каждого цвета, указанного в таблице Product
.
- использует AdventureWorks
ВЫБЕРИТЕ Цвет, СУММ (ListPrice) КАК TotalList,
СУММ (StandardCost) КАК TotalCost
ИЗ dbo.DimProduct
ГРУППА ПО цвету
ЗАКАЗАТЬ ПО цвету;
Первая часть набора результатов показана ниже:
Цвет TotalList TotalCost
---------- ------------- --------------
Черный 101295.7191 57490,5378
Синий 24082.9484 14772.0524
Серый 125.0000 51.5625
Мульти 880.7468 526.4095
NA 3162.3564 1360.6185
См. Также
Агрегатные функции (Transact-SQL)
Предложение OVER (Transact-SQL)
СУБД SQL агрегатная функция - javatpoint
- Функция агрегирования SQL используется для выполнения вычислений в нескольких строках одного столбца таблицы. Возвращает единственное значение.
- Он также используется для обобщения данных.
Типы функции агрегирования SQL
1. ФУНКЦИЯ СЧЕТА
- Функция COUNT используется для подсчета количества строк в таблице базы данных. Он может работать как с числовыми, так и с нечисловыми типами данных.
- COUNT использует COUNT (*), который возвращает количество всех строк в указанной таблице. COUNT (*) считает дубликат и Null.
Функция
Синтаксис
СЧИТАТЬ(*)
или же
COUNT ([ALL | DISTINCT] выражение)
Образец таблицы:
PRODUCT_MAST
ТОВАР | КОМПАНИЯ | КОЛ-ВО | СТАВКА | СТОИМОСТЬ |
---|---|---|---|---|
Поз.1 | Com1 | 2 | 10 | 20 |
Поз.2 | Com2 | 3 | 25 | 75 |
поз.3 | Com1 | 2 | 30 | 60 |
Item4 | Com3 | 5 | 10 | 50 |
Item5 | Com2 | 2 | 20 | 40 |
Item6 | копий / мин1 | 3 | 25 | 75 |
Item7 | Com1 | 5 | 30 | 150 |
Item8 | Com1 | 3 | 10 | 30 |
Item9 | Com2 | 2 | 25 | 50 |
поз. 10 | Com3 | 4 | 30 | 120 |
Пример: COUNT ()
ВЫБРАТЬ СЧЕТЧИК (*)
ОТ PRODUCT_MAST;
Вывод:
Пример: COUNT с WHERE
ВЫБРАТЬ СЧЕТЧИК (*)
ОТ PRODUCT_MAST;
ГДЕ СТАВКА> = 20;
Вывод:
Пример: COUNT () с DISTINCT
ВЫБРАТЬ СЧЕТ (ОТЛИЧНАЯ КОМПАНИЯ)
ОТ PRODUCT_MAST;
Вывод:
Пример: COUNT () с GROUP BY
ВЫБЕРИТЕ КОМПАНИЮ, КОЛИЧЕСТВО (*)
ОТ PRODUCT_MAST
ГРУППА ПО КОМПАНИИ;
Вывод:
Пример: COUNT () с HAVING
ВЫБЕРИТЕ КОМПАНИЮ, КОЛИЧЕСТВО (*)
ОТ PRODUCT_MAST
ГРУППА ПО КОМПАНИИ
ИМЕЕТ СЧЕТ (*)> 2;
Вывод:
2.СУММ, функция
Функция Sum используется для вычисления суммы всех выбранных столбцов. Он работает только с числовыми полями.
Синтаксис
СУММ ()
или же
SUM ([ALL | DISTINCT] выражение)
Пример: SUM ()
ВЫБЕРИТЕ СУММУ (СТОИМОСТЬ)
ОТ PRODUCT_MAST;
Вывод:
Пример: SUM () с WHERE
ВЫБЕРИТЕ СУММУ (СТОИМОСТЬ)
ОТ PRODUCT_MAST
ГДЕ КОЛИЧЕСТВО> 3;
Вывод:
Пример: SUM () с GROUP BY
ВЫБЕРИТЕ СУММУ (СТОИМОСТЬ)
ОТ PRODUCT_MAST
ГДЕ КОЛИЧЕСТВО> 3
ГРУППА ПО КОМПАНИИ;
Вывод:
Пример: SUM () с HAVING
ВЫБЕРИТЕ КОМПАНИЮ, СУММУ (СТОИМОСТЬ)
ОТ PRODUCT_MAST
ГРУППА ПО КОМПАНИИ
ИМЕЮЩАЯ СУММУ (СТОИМОСТЬ)> = 170;
Вывод:
3.Функция AVG
Функция AVG используется для вычисления среднего значения числового типа. Функция AVG возвращает среднее значение всех ненулевых значений.
Синтаксис
AVG ()
или же
AVG ([ALL | DISTINCT] выражение)
Пример:
ВЫБЕРИТЕ СРЕДНЮЮ (СТОИМОСТЬ)
ОТ PRODUCT_MAST;
Вывод:
4.
Функция MAX
Функция
MAX используется для нахождения максимального значения определенного столбца. Эта функция определяет наибольшее значение из всех выбранных значений столбца.
Синтаксис
МАКСИМУМ()
или же
MAX ([ALL | DISTINCT] выражение)
Пример:
ВЫБЕРИТЕ МАКС. (СТАВКА)
ОТ PRODUCT_MAST;
5. Функция MIN
Функция
MIN используется для поиска минимального значения определенного столбца. Эта функция определяет наименьшее значение из всех выбранных значений столбца.
Синтаксис
МИН ()
или же
MIN ([ALL | DISTINCT] выражение)
Пример:
ВЫБЕРИТЕ МИН (СКОРОСТЬ)
ОТ PRODUCT_MAST;
Вывод:
агрегатная функция SQL - w3resource
org/WebPageElement/Heading"> Агрегатная функция
Каждый запрос в SQL возвращает отфильтрованные результаты групп значений, а также значения полей.SQL предоставляет агрегатные функции, помогающие суммировать большие объемы данных.
Эта функция может создать одно значение для всей группы или таблицы.
Они работают с наборами строк и возвращают результаты на основе групп строк.
Общий синтаксис для большей части агрегатной функции следующий:
aggregate_function ([DISTINCT | ALL] выражение)
Список агрегатных функций SQL:
Функции | Описание |
---|---|
Функция подсчета SQL | Функция SQL COUNT возвращает количество строк в таблице, удовлетворяющих критериям, указанным в предложении WHERE.Он устанавливает количество строк или значения столбца, отличные от NULL. |
Функция суммы SQL | Функция SQL AGGREGATE SUM () возвращает сумму всех выбранных столбцов. |
Функция среднего SQL | Функция SQL AVG вычисляет среднее значение столбца числового типа. Он возвращает среднее значение всех ненулевых значений |
Функция SQL Max | Агрегатная функция SQL MAX () используется для поиска максимального или максимального значения определенного столбца или выражения.Эта функция полезна для определения наибольшего из всех выбранных значений столбца. |
Функция SQL Min | Агрегатная функция SQL MIN () используется для поиска минимального или минимального значения столбца или выражения. Эта функция полезна для определения наименьшего из всех выбранных значений столбца. |
Все агрегатные функции
Практика выполнения упражнений SQL
Хотите улучшить статью выше? Публикуйте свои заметки / комментарии / примеры через Disqus.
Предыдущая: Функции
Следующая: COUNT Function
| Вычисляет среднее значение столбца, заданное выражением | |
| Вычисляет коэффициент корреляции | |
| ||
| Подсчитывает все строки в указанной таблице или представлении | |
5 зависимый 5 зависимый , | Вычисляет Ковариация популяции | |
| Вычисляет ковариацию выборки | |
| Вычисляет относительный ранг гипотетической строки в группе строк, где ранг равен количеству строк, меньших или равных гипотетической строке, деленной на количество строк в группе | |
| Создает плотное ранжирование (нет рангов пропущено) для гипотетической строки ( | |
| Находит минимальное значение в столбце, задаваемое выражением | |
| Находит максимальное значение в столбце, задаваемое выражением | |
| Создает относительный ранг для гипотетической строки путем деления ранга этой строки минус 1 на количество строк в группе | |
| Создает интерполированное значение, которое при добавлении к группе соответствовало бы процентилю | |
| Возвращает значение с наименьшим совокупным значением распределения, большим или равным | |
| Создает ранжирование для гипотетической строки ( | |
| Вычисляет среднее значение независимой переменной | |
| Вычисляет среднее значение зависимой переменной | 3 |
| Подсчитывает количество пар, оставшихся в группе после удаления любой пары с одним или несколькими значениями NULL | |
| Вычисляет пересечение по оси Y линейного уравнения наименьших квадратов | |
| ||
| Определяет наклон линейного уравнения наименьших квадратов | Суммирует квадраты независимых переменных |
| Суммирует произведения каждой пары переменных | |
| Суммирует квадраты зависимых переменных | Вычисляет стандартное отклонение генеральной совокупности для всех |
| 900 стандартное отклонение Вычисляет стандартное отклонение всех выражения значений в группе | |
| Вычисляет сумму значений столбца, заданных выражением | |
| Вычисляет дисперсию совокупности всех значений выражения | |
9016 Вычисляет образец подставки среднее отклонение всех |
Агрегатные функции в SQL Server
Что такое агрегированные функции в SQL Server? Эта статья поможет вам изучить различные агрегатные функции в SQL Server.
Что такое агрегатные функции?
Я могу дать разные определения.
- Агрегатные функции встроены в функции сервера sql.
- Агрегатные функции применяются к наборам записей, а не к отдельной записи.
- Агрегатные функции выполняют вычисления для набора значений, а не для одного значения.
- Агрегатные функции используются для суммирования данных.
- Агрегатные функции выполняют вычисление набора значений и возвращают одно значение.
Начало работы
Информация в нескольких записях обрабатывается определенным образом и затем отображается в виде ответа на одну запись.
Агрегатные функции часто используются вместе с предложением GROUP BY.
Агрегатные функции не могут быть вложенными. Выражение не может быть подзапросом.
Список встроенных агрегатных функций:
AVG, CHECKSUM, CHECKSUM_AGG, COUNT, COUNT_BIG, GROUPING, MAX, MIN, SUM, STDEV, STDEVP, VAR, VARP.
AVG в SQL Server
AVG возвращает среднее значение в выражении. Выражение должно содержать числовые значения. Нулевые значения игнорируются.
Синтаксис: AVG ([ALL | DISTINCT] <выражение>)
- выберите идентификатор заказа, средн. (UnitPrice) UnitPrice из базы данных. [Сведения о заказе] группировать по идентификатору заказа;
КОНТРОЛЬНАЯ СУММА в SQL Server
Это базовый алгоритм хеширования, обычно используемый для обнаружения изменений или согласованности данных.
«Цифра, представляющая сумму правильных цифр в фрагменте сохраненных или переданных цифровых данных, с которой впоследствии могут быть выполнены сравнения для обнаружения ошибок в данных».
Синтаксис: CHECKSUM (<выражение>, [... n] | *)
- SELECT CHECKSUM (orderid, UnitPrice, количество), orderid, UnitPrice, количество FROM dbo. [Детали заказа] WHERE orderid = 10248
CHECKSUM_AGG в SQL Server
То же, что и CHECKSUM, но основное отличие состоит в том, что CHECKSUM ориентирована на строки, тогда как CHECKSUM_AGG ориентирована на столбцы.
Синтаксис: CHECKSUM ([ALL | DISTINCT] <выражение>)
- SELECT CHECKSUM_AGG (CAST (UnitPrice AS int)) FROM dbo. [Order Details]
- update dbo. [Order Details] set UnitPrice = 15
- , где orderid = 10248 и ProductID = 11
- SELECT CHECKSUM_AGG (CAST (UnitPrice AS int)) FROM dbo. [Сведения о заказе]
COUNT в SQL Server
Возвращает количество элементов в выражении.Возвращаемый тип данных имеет тип int.
Синтаксис: COUNT ([ALL | DISTINCT] <выражение> | *)
- выберите COUNT (*), AVG (UnitPrice) из dbo. [Сведения о заказе]
COUNT_BIG в SQL Server
Возвращает количество элементов в группе. Возвращаемый тип данных имеет тип bigint.
Синтаксис: COUNT ([ALL | DISTINCT] <выражение> | *)
- выберите COUNT_BIG (*), AVG (UnitPrice) из dbo.[Сведения о заказе]
GROUPING в SQL Server
MSDN: это агрегатная функция, которая вызывает вывод дополнительного столбца со значением 1, когда строка добавляется оператором CUBE или ROLLUP, или 0, когда строка не является результатом CUBE или ROLLUP.
Функция добавляет дополнительный столбец к выходным данным оператора SELECT.
Синтаксис: GROUPING (
- select orderid, sum (UnitPrice) UnitPrice, GROUPING (orderid) 'orderid'
- from dbo.[Сведения о заказе] WHERE orderid = 10248
- GROUP BY orderid WITH cube
MAX в SQL Server
Возвращает максимальное значение из выражения. Макс игнорирует любые значения NULL.
Синтаксис: MAX ([ALL | DISTINCT]
- выберите MAX (QUANTITY) из dbo. [Детали заказа]
MIN в SQL Server
Возвращает наименьшее значение из выражения .Min игнорирует любые значения NULL.
Синтаксис: MIN ([ALL | DISTINCT]
- выберите MIN (QUANTITY) из dbo. [Сведения о заказе]
SUM в SQL Server
Возвращает сумму всех значений в выражении. Sum игнорирует любые значения NULL.
Синтаксис: SUM ([ALL | DISTINCT]
- выберите SUM (QUANTITY) из dbo. [Детали заказа]
STDEV в SQL Server
Возвращает стандартное отклонение всех значения в выражении.Stdev игнорирует любые значения NULL.
Синтаксис: СТАНДОТКЛОН (<выражение>)
- выберите СТАНДОТКЛОН (КОЛИЧЕСТВО) из dbo. [Детали заказа]
СТАНДОТКЛОН в SQL Server
Возвращает стандартное отклонение для совокупности всех значений в выражение. Stdevp игнорирует любые значения NULL.
Синтаксис: STDEVP (<выражение>)
- выберите STDEVP (КОЛИЧЕСТВО) из dbo. [Детали заказа]
VAR в SQL Server
Возвращает дисперсию всех значений в выражении.Var игнорирует любые значения NULL.
Синтаксис: VAR (
- select VAR (QUANTITY) from dbo. [Order Details]
VARP in SQL Server
Возвращает дисперсию для совокупности всех значений в выражении . Varp игнорирует любые значения NULL.
Синтаксис: VARP (<выражение>)
- выберите VARP (КОЛИЧЕСТВО) из dbo. [Детали заказа]
Резюме
Надеюсь, эта статья помогла вам всем, Спасибо.
Агрегатные функции в SQL | Журналистика данных по связям с общественностью в Стэнфордском университете
Содержание
Агрегатные функции используются для выполнения вычислений, таких как сумма или среднее группы значений. Все они принимают по крайней мере один аргумент - обычно имя столбца, для которого мы хотим суммировать или усреднять значения.
ВЫБРАТЬ СУММУ (некоторый_столбец)
ОТ some_table;
Как агрегатные функции изменяют результат
Агрегатные функции будут возвращать только агрегированного значения результирующих строк.В приведенном выше примере, даже если some_table
имеет 20000 строк, результатом запроса будет одно значение, то есть примерно так:
Другими словами, агрегатные функции коренным образом изменяют форму результата .
Где можно использовать агрегатные функции?
Агрегатные функции, в отличие от других основных функций, могут быть вызваны только как часть предложения SELECT
.
Значит, этот запрос не будет работать (да и смысла в нем нет):
ВЫБРАТЬ some_column
ИЗ some_table
где SUM (some_column)> 100;
Проще говоря: просто сохраните агрегатные функции в начале оператора SELECT
.
Примечание: этот раздел повторяет предыдущее введение, за исключением использования данных имени ребенка SSA, а также описания функции COUNT
.
Самый простой вид агрегирования - это просто подсчитать количество строк. Раньше мы могли получить количество строк результатов, просмотрев журнал результатов после выполнения запроса:
Однако это был только побочный эффект выполнения стандартного запроса и удобство, обеспечиваемое клиентом графического интерфейса. Как мы уже заметили, изучая SQL, мы должны быть явными , спрашивая именно то, что мы хотим.
Как использовать
COUNT
в запросе
Используя функцию COUNT
, мы можем запросить базу данных, чтобы вернуть общее количество строк в таблице. Агрегатные функции используются только после предложения SELECT .
Функция COUNT принимает единственный аргумент. Чаще всего просто используют звезду - это сообщает COUNT
, что нужно подсчитать все строки в результате:
ВЫБРАТЬ СЧЕТЧИК (*)
FROM baby_names;
Результат:
Конечно, мы можем посчитать более конкретные вещи, например: сколько детских имен девочек было в Калифорнии в 2012 году?
ВЫБРАТЬ СЧЕТЧИК (*)
ОТ baby_names
ГДЕ состояние = 'CA'
И секс = 'F'
И год = 2012;
Результат:
Результаты агрегатных функций
Обратите внимание, как COUNT
и другие агрегатные функции сворачивают строки результатов в одно значение .
Без агрегатной функции SELECT * FROM baby_names;
должен был вернуть все 633 608 строк результатов. Однако агрегатная функция применяется ко всем строкам в наборе результатов и возвращает единственное агрегированное значение . Другими словами, подсчет 633 608 отдельных строк дает только один ответ: «всего 633 608 строк».
Примечание: Однако , используя GROUP BY
, мы можем указать, как результаты должны быть сгруппированы и агрегированы, если мы хотим, например, сделать COUNT
строк результатов на состояние
.Здесь все усложняется.
В следующем руководстве мы узнаем, как использовать GROUP BY
вместе с агрегатными функциями. А пока давайте просто узнаем о других агрегатных функциях.
Проблема с включением столбцов, которые не суммируются
Давайте повторим вышеупомянутый запрос, за исключением включения других столбцов для предоставления некоторого контекста. И пока мы это делаем, мы назовем вызов функции COUNT
:
ВЫБРАТЬ состояние, пол, год,
COUNT (*) как total_count
ОТ baby_names
ГДЕ состояние = 'CA'
И секс = 'F'
И год = 2012;
Результат:
состояние | секс | год | total_count |
---|---|---|---|
CA | F | 2012 | 4088 |
Это имеет смысл, поскольку state
и sex
и year
показывают единственные возможные значения, которые были разрешены предложением WHERE
.
Но это немного обманчиво относительно того, как на самом деле работает запрос. Лучше проиллюстрировать это примером: что происходит, когда мы хотим подсчитать за все года? В этом случае мы просто удаляем И год = 2012
из предложения:
ВЫБРАТЬ состояние, пол, год,
COUNT (*) как total_count
ОТ baby_names
ГДЕ состояние = 'CA'
И секс = 'F';
состояние | секс | год | total_count |
---|---|---|---|
CA | F | 2014 | 20109 |
Обратите внимание, что столбец год
указан как 2014
, из-за чего результат выглядит так, как будто он предназначен только для 2014
. Помните, что агрегатные функции уменьшают набор результатов до одного значения . Мы знаем, что год
содержит 5 различных возможных значений (то есть с 2010 по 2014 год), но запрос предназначен для возврата только одной строки. Так почему это 2014
? Насколько нам известно, это может быть просто случайным образом.
Результат: не включает столбцы, которые не объединяются .
Я повторю это в конце урока, так что продолжаем…
COUNT (*) vs COUNT (столбец)
Функция COUNT
принимает единственный аргумент.Использование звезды сообщает COUNT
просто подсчитать все строки в наборе результатов. Однако мы можем передать имя столбца, чтобы получить количество значений, отличных от NULL
:
ВЫБРАТЬ СЧЕТЧИК (состояние)
FROM baby_names;
Это фактически приводит к тому же номеру (т.е. 633608
), что и раньше. Это связано с тем, что нет значений, отличных от - NULL
, в состоянии
, т.е. несуществующих значений . На самом деле мы еще не рассмотрели NULL
, и эта конкретная база данных не содержит значений NULL
… поэтому мы вернемся к этому вопросу позже.
Разница между столбцом count и функцией COUNT
В качестве примечания стоит задаться вопросом, как интерпретатор определяет разницу между count
, столбцом и функцией COUNT
. Напомним, что идентификаторы столбцов и ключевые слова SQLite интерпретируются без учета регистра. Таким образом, следующие три запроса эквивалентны и действительны:
ВЫБРАТЬ количество (количество) FROM baby_names;
ВЫБЕРИТЕ КОЛИЧЕСТВО (КОЛИЧЕСТВО) ИЗ baby_names;
ВЫБРАТЬ КОЛИЧЕСТВО ("КОЛИЧЕСТВО") ИЗ baby_names;
Короткий ответ: потому что это всего лишь часть синтаксиса и грамматики SQL. Интерпретатор знает, что count
само по себе должно ссылаться на какой-то идентификатор, то есть на имя столбца. И вызов count (что угодно)
, count
интерпретируется как вызов функции.
Еще один вывод: старайтесь не называть свои столбцы чем-то вроде count
, или sum
, или даже name
, потому что это сбивает с толку. Очевидно, я не следовал этому правилу с базой данных детских имен SSA.
Использование DISTINCT для подсчета уникальных значений
Иногда нас не волнует общее количество строк, а количество уникальных значений в определенном столбце.Ключевое слово DISTINCT
, за которым следует имя столбца, можно использовать в качестве аргумента при любом вызове агрегатной функции (хотя в основном это имеет смысл для функции COUNT
).
Давайте попрактикуемся в столбце, уникальное количество значений которого нам известно:
ВЫБРАТЬ СЧЕТЧИК (РАЗЛИЧНЫЙ пол)
FROM baby_names;
Результат:
Чтобы получить количество уникальных имен:
ВЫБРАТЬ СЧЕТЧИК (ОТЛИЧНОЕ имя)
FROM baby_names;
Результат:
СЧЕТ (ОТЛИЧНОЕ имя) |
---|
46359 |
Результат COUNT
и DISTINCT
аналогичен счетчику, полученному в журнале результатов при выполнении GROUP BY
имя столбец
:
ВЫБРАТЬ имя
ОТ baby_names
ГРУППА ПО имени;
46359 Строки, возвращенные от: SELECT name
ОТ baby_names
ГРУППА ПО имени; (заняло 178 мс)
Конечно, разница в том, что COUNT (DISTINCT name)
возвращает единственное значение: количество строк, возвращенных запросом GROUP BY
.
В следующем уроке мы узнаем, насколько полезным может быть выполнение COUNT (DISTINCT)
и предложения GROUP BY
. Но сначала познакомимся с остальными агрегатными функциями.
В SQLite не так много встроенных агрегатных функций. Вот официальный список; Я считаю, что все они обычно полезны для работы с данными, хотя я не буду описывать GROUP_CONCAT
, потому что он немного специализирован (и может сбивать с толку).
Функция СУММ
Функция СУММ
возвращает сумму значений группы.Он принимает один аргумент, обычно это имя столбца, значения которого мы хотим просуммировать. Вот сумма всех count
значений в baby_names
:
ВЫБРАТЬ СУММУ (количество)
FROM baby_names;
Результат:
Это бессмысленный номер. Помните, что таблица baby_names
содержит строку для каждого штата и для США (т.е. state = 'USA'
) в целом. Таким образом, мы фактически производим двойной подсчет.
Итак, давайте используем предложение WHERE
для удаления строк USA
:
ВЫБРАТЬ СУММУ (количество)
ОТ baby_names
ГДЕ государство! = 'США';
Ответ:
Или, чтобы просто суммировать USA
строк:
ВЫБРАТЬ СУММУ (количество)
ОТ baby_names
ГДЕ государство = 'США';
Ответ:
Почему такое огромное неравенство? Опять же, это как-то связано с тем, как Администрация социального обеспечения удаляет строки, в которых количество
на меньше, чем 5 - в отдельных штатах есть больше записей по именам / годам / полу, которые подпадают под это исключение.
Что происходит, когда вы пытаетесь суммировать значения, не являющиеся числами?
ВЫБРАТЬ СУММУ (имя)
FROM baby_names;
SQLite обрабатывает нечисловые значения как 0,0. Поскольку столбец name
полностью заполнен нечисловыми значениями, ответ должен быть предсказуемым:
Функция AVG
Функция AVG
возвращает среднее значение из группы значений. Следующий запрос найдет среднее значение count
(опять же, столбец count
, , а не функция COUNT
) для каждого имени для USA
в году
2014
:
ВЫБРАТЬ СРЕДНЕЕ (количество)
ОТ baby_names
ГДЕ государство = 'США'
И год = 2014;
СРЕДНЕЕ (кол-во) |
---|
53.2240959710105 |
Для AVG
обычно используется ROUND
, если вам не нужна десятичная точность:
ВЫБРАТЬ КРУГЛЫЙ (СРЕДНЕЕ (количество))
ОТ baby_names
ГДЕ государство = 'США'
И год = 2014;
Другими словами, в 2014 году на каждого мальчика приходилось 53 ребенка по всей стране.
Функции MAX и MIN
Функции MAX
и MIN
возвращают наибольшее и наименьшее значение, соответственно, данной группы значений.
Мы уже знаем минимальное количество младенцев, то есть count
- для любого имени, штата, года и пола, это 5. Но мы можем подтвердить, что используя функцию MIN
на count
:
ВЫБРАТЬ МИН (количество)
FROM baby_names;
Результат:
Чтобы найти наибольшее количество младенцев, которое когда-либо было названо «Даниэль»
, по крайней мере, между 2010 и 2014 годами, для любого штата США:
ВЫБРАТЬ МАКС. (Количество)
ОТ baby_names
ГДЕ государство! = 'США'
И имя = 'Даниил';
Ответ:
Разница между MAX / MIN и LIMIT & ORDER
Если вы помните урок с предложениями LIMIT
и ORDER
, вы можете утверждать, что у нас есть прекрасный способ найти наибольшее и наименьшее значение для любого заданного столбца.
Например, чтобы найти наименьшее количество из , сосчитайте
:
ВЫБРАТЬ количество
ОТ baby_names
ЗАКАЗАТЬ ПО счетчику ASC
LIMIT 1;
И самое большое количество младенцев по имени Daniel
в одном штате США:
ВЫБРАТЬ количество
ОТ baby_names
ГДЕ государство! = 'США'
И имя = 'Даниэль'
ЗАКАЗАТЬ ПО УДАЛЕНИЮ
LIMIT 1;
И запросы MIN / MAX
и LIMIT
и ORDER BY
возвращают одинаковый ответ. Так зачем использовать одно вместо другого? Что ж, запросы LIMIT
и ORDER BY
имеют то преимущество, что фактически возвращают всю строку, что мы можем сделать, выполнив SELECT *
, и, таким образом, предоставив нам необходимый контекст, например: какой год
и состояние
3131
Дэниэлс родился:
ВЫБРАТЬ *
ОТ baby_names
ГДЕ государство! = 'США'
И имя = 'Даниэль'
ЗАКАЗАТЬ ПО УДАЛЕНИЮ
LIMIT 1;
состояние | секс | год | название | счет |
---|---|---|---|---|
CA | M | 2010 | Даниил | 3131 |
Это кажется значительно более полезным, чем то, что может предоставить MAX
.Так что читайте один из примеров использования MAX
и MIN
.
Выполнение нескольких агрегатных функций
Так же, как несколько неагрегатных функций, например LENGTH
, LTRIM
, UPPER
и т. Д. - могут использоваться в предложении SELECT
, то же самое применимо к агрегатным функциям.
Например, чтобы найти наибольшее и наименьшее количество из мальчиков младенцев с именем «Даниэль»
по всей стране, а также среднее значение и сумму за все годы в таблице baby_names
:
ВЫБРАТЬ СУММУ (количество), КРУГЛЫЙ (СРЕДНИЙ (количество)),
МИН (количество), МАКС (количество)
ОТ baby_names
ГДЕ государство = 'США'
И имя = 'Даниэль'
И секс = 'М';
СУММА (количество) | КРУГЛЫЙ (СРЕДНЕЕ (количество)) | МИН (количество) | МАКС (количество) |
---|---|---|---|
73346 | 14669.0 | 13829 | 15815 |
Итак, это один из примеров того, как MAX / MIN
отличается от использования ORDER BY
и LIMIT 1
- последнее ограничено отображением наибольшего или наименьшего значения. Таким образом, хотя оба подхода теоретически могут привести к одному и тому же фактическому ответу, то, что мы используем, просто зависит от типа запроса, который мы хотим сделать.
Или, повторяя то, что я сказал раньше: всегда есть более одного способа получить ответ.
Я понимаю, что затронул эту тему раньше, но очень легко ошибиться, когда мы перейдем к более сложным запросам. Вот почему я считаю, что стоит повторить еще раз, прежде чем мы закончим это руководство.
Вспомните запрос, необходимый для подсчета всех строк в данной таблице:
ВЫБРАТЬ СЧЕТЧИК (*)
FROM baby_names;
И ответ:
Что произойдет, если мы включим все столбцы вместе с функцией COUNT
?
ВЫБРАТЬ *, СЧЁТ (*)
FROM baby_names;
Результат:
состояние | секс | год | название | счет | СЧЁТ (*) |
---|---|---|---|---|---|
США | M | 2014 | Зырин | 5 | 633608 |
Как интерпретировать этот результат? Что у мальчика по имени Зырин
было 633 608 строк? Конечно, нет. Почему база данных решила вернуть это конкретное имя, год, пол и штат? Кто знает?
И поэтому лучше всего включать только те столбцы, которые вы подсчитываете / усредняете / суммируете и т. Д.
Примечание. Для тех из вас, кто интересуется SQL в целом до нездоровой степени, SQLite - один из немногих вариантов SQL, который позволяет смешивать агрегированные и неагрегированные столбцы. Однако многие другие разновидности SQL этого не делают. Или, если они это сделают, результаты будут даже более произвольными, чем в SQLite.Вот почему я настоятельно рекомендую по привычке следовать правилу не смешивать неагрегированные и агрегированные столбцы. Потому что другие варианты SQL, особенно PostgreSQL, не позволят вам быть столь небрежным.
Предыдущие руководства
Использование GROUP BY для создания агрегатов в SQL. Используя предложение GROUP BY, мы получаем возможность агрегировать наши данные на основе значений в данном столбце или столбцах.