In SQL, there are two built-in functions to sum or average the data in your table.
In this article I will show you how to use the SUM
and AVG
functions in SQL using code examples.
How to use the SUM function in SQL
If you need to add a group of numbers in your table you can use the SUM
function in SQL.
This is the basic syntax:
SELECT SUM(column_name) FROM table_name;
The SELECT
statement in SQL tells the computer to get data from the table.
The FROM
clause in SQL specifies which table we want to list.
In this example, we have a table called students
with the columns of id
, name
, date
, and total
. We want to add up the total number of candy bars sold by all of the students.
We can use this syntax to get the total number of candy bars sold:
SELECT SUM(total) FROM students;
The result would be 41.
We can also get the sum for each student using the GROUP BY
clause.
The first part is to select the name and sum for the total number of candy bars sold, like this:
SELECT name, SUM(total)
The second part is to group the sum by name:
FROM students GROUP BY name;
Here is the complete code to group the total number of candy bars sold by student name.
SELECT name, SUM(total) FROM students GROUP BY name;
This is what the result would look like in our table:
Right now the results are grouped alphabetically by student name.
We can modify the code to sort the list of results from largest total to smallest using the ORDER BY
clause.
SELECT name, SUM(total) FROM students GROUP BY name ORDER BY total DESC;
The DESC
keyword tells the computer to sort from largest to smallest total.
If we wanted to sort the total from smallest to largest, then we would omit the DESC
keyword.
SELECT name, SUM(total) FROM students GROUP BY name ORDER BY total;
How to use the AVG function in SQL
The AVG
function finds the arithmetic mean for a group of records in a SQL table. An average, or arithmetic mean, is the sum of a group of numbers divided by the count for that group.
For example, 2+4+4+6+6+8 is 30 divided 6 which results in an average of 5.
This is the basic syntax for the AVG
function:
SELECT AVG(column_name) FROM table_name;
In this example, we have a table called students
, with columns of id
, name
, date
, and scores
. We want to find the average of all the students’ test scores in our table.
We have to use this syntax to get the average for the test scores:
SELECT AVG(scores) FROM students;
The average would be 85.333.
We can also use the ROUND
function to round our result to the nearest integer.
SELECT ROUND(AVG(scores)) FROM students;
We can also get the average for each student using the GROUP BY
clause.
The first part is to select the name and average for the scores, like this:
SELECT name, ROUND(AVG(scores))
The second part is to group the average scores by name:
FROM students GROUP BY name;
This is what the code looks like all together:
SELECT name, ROUND(AVG(scores)) FROM students GROUP BY name;
This is what the result looks like in the table:
Conclusion
There may be times were you need to find the sum or average of records in your table.
If you need to add a group of numbers in your table you can use the SUM
function in SQL.
This is the basic syntax:
SELECT SUM(column_name) FROM table_name;
If you need to arrange the data into groups, then you can use the GROUP BY
clause.
The AVG
function finds the arithmetic mean for a group of records in a SQL table. An average, or arithmetic mean, is the sum of a group of numbers divided by the count for that group.
This is the basic syntax.
SELECT AVG(column_name) FROM table_name;
I hope you enjoyed this tutorial and best of luck on your SQL journey.
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started
I have a mysql table that has a number of rows, and in each row a field called «value»,
the field value will differ from row to row.
What I want, is to select all the rows and count the sum of all the «value» fields.
any idea?
Devin Burke
13.6k12 gold badges55 silver badges82 bronze badges
asked May 25, 2011 at 21:30
2
Do you mean like this?
SELECT SUM(value)
FROM myTable
If you have multiple columns to return, simply add each non-aggregate (i.e., summed) row to the GROUP BY
clause:
SELECT firstName, lastName, SUM(value)
FROM myTable
GROUP BY firstName, lastName
answered May 25, 2011 at 21:33
Devin BurkeDevin Burke
13.6k12 gold badges55 silver badges82 bronze badges
2
SELECT SUM(`value`) FROM `your_table`
answered May 25, 2011 at 21:33
Tomas MarkauskasTomas Markauskas
11.5k2 gold badges33 silver badges35 bronze badges
SELECT SUM(value) as total FROM table;
$row['total'];
answered May 25, 2011 at 21:34
Lawrence CheroneLawrence Cherone
45.9k7 gold badges61 silver badges104 bronze badges
SELECT SUM(value)
FROM YourTable
answered May 25, 2011 at 21:33
Joe StefanelliJoe Stefanelli
132k19 gold badges237 silver badges235 bronze badges
What you’ll want is the GROUP
-function named SUM.
answered May 25, 2011 at 21:34
Lukas KnuthLukas Knuth
25.4k15 gold badges83 silver badges111 bronze badges
This query will return the sum of value
and the number of rows count:
SELECT count(*), sum(value) FROM tablename
User42
9701 gold badge16 silver badges27 bronze badges
answered Oct 19, 2016 at 10:35
create table #tempTable
(
Id bigint,
Title varchar(100),
Amount money
)
insert into #TempTable(Title,Id,Amount)
Values
('Company 6', 10024, 120),
('Company 6', 10024, 569),
('Company 6', 10024, 53),
('Company 6', 10024, 100),
('Company 6', 10024, 564),
('Company 7', 10638, 9500),
('Company 7', 10638, 105),
('Company 7', 10638, 624)
select Title, Sum(Amount)Amount from #TempTable
group by Title,ID
drop Table #TempTable
Оператор SQL SUM() — функция, возвращающая сумму значений столбца таблицы. Используется только для числовых столбцов.
Функция SQL SUM() имеет следующий синтаксис:
SUM ( [ALL | DISTINCT] expression )
Параметр ALL — является параметром по умолчанию. Считается сумма всех строк.
При указании параметра DISTINCT — происходит подсчет только уникальных значений.
Примеры оператора SQL SUM: Имеется следующая таблица Universities:
ID | UniversityName | Students | Faculties | Professores | Location | Site |
1 | Perm State National Research University | 12400 | 12 | 1229 | Perm | psu.ru |
2 | Saint Petersburg State University | 21300 | 24 | 13126 | Saint-Petersburg | spbu.ru |
3 | Novosibirsk State University | 7200 | 13 | 1527 | Novosibirsk | nsu.ru |
4 | Moscow State University | 35100 | 39 | 14358 | Moscow | msu.ru |
5 | Higher School of Economics | 20335 | 12 | 1615 | Moscow | hse.ru |
6 | Ural Federal University | 57000 | 19 | 5640 | Yekaterinburg | urfu.ru |
7 | National Research Nuclear University | 8600 | 10 | 936 | Moscow | mephi.ru |
Пример 1. Используя оператор SQL SUM найти количество студентов (Students) всех университетов в таблице:
SELECT SUM(Students) FROM Universities
Ответ: 161935
Пример 2. Используя оператор SQL SUM найти количество преподавателей московских университетов:
SELECT SUM(Professores) FROM Universities WHERE Location = 'Moscow'
Ответ: 16909
Пример 3. Используя оператор SQL SUM произвести подсчет уникальных значений столбца Faculties:
SELECT SUM(DISTINCT Faculties) FROM Universities
Ответ: 117 (примечание: в столбце Faculties присутствует 2 одинаковых записи, под ID 1 и 5. Значение столбца под ID 5 не суммируется.)
Группировка
Агрегатные функции
Последнее обновление: 19.07.2017
Агрегатные функции выполняют вычисления над значениями в наборе строк. В T-SQL имеются следующие агрегатные функции:
-
AVG: находит среднее значение
-
SUM: находит сумму значений
-
MIN: находит наименьшее значение
-
MAX: находит наибольшее значение
-
COUNT: находит количество строк в запросе
В качестве аргумента все агрегатные функции принимают выражение, которое представляет критерий дя определения значений. Зачастую, в качестве
выражения выступает название столбца, над значениями которого надо проводить вычисления.
Выражения в функциях AVG и SUM должно представлять числовое значение. Выражение в функциях
MIN, MAX и COUNT может представлять числовое или строковое значение или дату.
Все агрегатные функции за исключением COUNT(*)
игнорируют значения NULL.
Avg
Функция Avg возвращает среднее значение на диапазоне значений столбца таблицы.
Пусть в базе данных у нас есть таблица товаров Products, которая описывается следующими выражениями:
CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL ); INSERT INTO Products VALUES ('iPhone 6', 'Apple', 3, 36000), ('iPhone 6S', 'Apple', 2, 41000), ('iPhone 7', 'Apple', 5, 52000), ('Galaxy S8', 'Samsung', 2, 46000), ('Galaxy S8 Plus', 'Samsung', 1, 56000), ('Mi6', 'Xiaomi', 5, 28000), ('OnePlus 5', 'OnePlus', 6, 38000)
Найдем среднюю цену товаров из базы данных:
SELECT AVG(Price) AS Average_Price FROM Products
Для поиска среднего значения в качестве выражения в функцию передается столбец Price. Для получаемого значения устанавливается псевдоним Average_Price, хотя можно его и не
устанавливать.
Также мы можем применить фильтрацию. Например, найти среднюю цену для товаров какого-то определенного производителя:
SELECT AVG(Price) FROM Products WHERE Manufacturer='Apple'
И, кроме того, мы можем находить среднее значение для более сложных выражений.
Например, найдем среднюю сумму всех товаров, учитывая их количество:
SELECT AVG(Price * ProductCount) FROM Products
Count
Функция Count вычисляет количество строк в выборке. Есть две формы этой функции.
Первая форма COUNT(*)
подсчитывает число строк в выборке:
SELECT COUNT(*) FROM Products
Вторая форма функции вычисляет количество строк по определенному столбцу, при этом строки со значениями NULL игнорируются:
SELECT COUNT(Manufacturer) FROM Products
Min и Max
Функции Min и Max возвращают соответственно минимальное и максимальное значение по столбцу.
Например, найдем минимальную цену среди товаров:
SELECT MIN(Price) FROM Products
Поиск максимальной цены:
SELECT MAX(Price) FROM Products
Данные функции также игнорируют значения NULL и не учитывают их при подсчете.
Sum
Функция Sum вычисляет сумму значений столбца. Например, подсчитаем общее количество товаров:
SELECT SUM(ProductCount) FROM Products
Также вместо имени столбца может передаваться вычисляемое выражение. Например, найдем общую стоимость всех имеющихся товаров:
SELECT SUM(ProductCount * Price) FROM Products
All и Distinct
По умолчанию все вышеперечисленных пять функций учитывают все строки выборки для вычисления результата. Но выборка может содержать повторяющие значения.
Если необходимо выполнить вычисления только над уникальными значениями, исключив из набора значений повторяющиеся данные, то для
этого применяется оператор DISTINCT.
SELECT AVG(DISTINCT ProductCount) AS Average_Price FROM Products
По умолчанию вместо DISTINCT применяется оператор ALL, который выбирает все строки:
SELECT AVG(ALL ProductCount) AS Average_Price FROM Products
Так как этот оператор неявно подразумевается при отсутствии DISTINCT, то его можно не указывать.
Комбинирование функций
Объединим применение нескольких функций:
SELECT COUNT(*) AS ProdCount, SUM(ProductCount) AS TotalCount, MIN(Price) AS MinPrice, MAX(Price) AS MaxPrice, AVG(Price) AS AvgPrice FROM Products