Summary: in this tutorial, you will learn how to use the MySQL SUM()
function to calculate the sum of values in a set.
Introduction to the MySQL SUM()
function
The SUM()
function is an aggregate function that allows you to calculate the sum of values in a set. The syntax of the SUM()
function is as follows:
SUM(DISTINCT expression)
Code language: SQL (Structured Query Language) (sql)
Here is how the SUM()
function works:
- If you use the
SUM()
function in aSELECT
statement that returns no row, theSUM()
function returnsNULL
, not zero. - The
DISTINCT
option instructs theSUM()
function to calculate the sum of only distinct values in a set. - The
SUM()
function ignores theNULL
values in the calculation.
MySQL SUM()
function illustration
First, create a new table named sum_demo
:
CREATE TABLE sum_demo (
n INT
);
Code language: SQL (Structured Query Language) (sql)
Then, insert some rows into the sum_demo
table:
INSERT INTO sum_demo(n)
VALUES(1),(1),(2),(NULL),(3);
Code language: SQL (Structured Query Language) (sql)
Third, use the SUM()
function to calculate the total values in the n
column:
SELECT
SUM(n)
FROM
sum_demo;
Code language: SQL (Structured Query Language) (sql)
As you can see, the SUM()
function calculates the total of 1, 1, 2, and 3. And it ignores NULL.
Finally, use the SUM()
with the DISTINCT
option to calculate the total values in the n
column:
SELECT
SUM(DISTINCT n)
FROM
sum_demo;
Code language: SQL (Structured Query Language) (sql)
In this case, the SUM()
with the DISTINCT
option only calculates the sum of distinct values which are 1, 2 and 3.
MySQL SUM()
function examples
Let’s take a look at the table orderdetails
in the sample database.
1) Simple MySQL SUM()
function example
This example uses the SUM()
function to get the total number of items of the order details:
SELECT
SUM(quantityOrdered) SalesQuantity
FROM
orderdetails;
Code language: SQL (Structured Query Language) (sql)
2) MySQL SUM()
function with expression example
The following shows the order line items of the order number 10110:
SELECT
orderNumber,
quantityOrdered,
priceEach
FROM
orderdetails
WHERE
orderNumber = 10100;
Code language: SQL (Structured Query Language) (sql)
To calculate the total for the order number 10110, you use the SUM()
function as follows:
SELECT
SUM(quantityOrdered * priceEach) orderTotal
FROM
orderdetails
WHERE
orderNumber = 10100;
Code language: SQL (Structured Query Language) (sql)
In this tutorial, the SUM()
function calculates the total of the following expression of all order line items of the order number 10110:
quantityOrdered * priceEach
Code language: SQL (Structured Query Language) (sql)
3) MySQL SUM()
with the GROUP BY
clause example
The SUM()
function is often used with the GROUP BY
clause to calculate the sum for each group.
For example, you can calculate the total amount of each order by using the SUM()
function with the GROUP BY
clause as shown in the following query:
SELECT
orderNumber,
SUM(quantityOrdered * priceEach) orderTotal
FROM
orderdetails
GROUP BY
orderNumber
ORDER BY
orderTotal DESC;
Code language: SQL (Structured Query Language) (sql)
In this example:
- The
GROUP BY
clause divides order details into groups grouped by the order number. - The
SUM()
function calculates the total of each amount of each order.
4) MySQL SUM()
with HAVING
clause example
You can use the SUM()
function in the HAVING
clause to filter the group. This example illustrates how to select orders whose order amounts are greater than 60,000
.
SELECT
orderNumber,
SUM(quantityOrdered * priceEach) orderTotal
FROM
orderdetails
GROUP BY
orderNumber
HAVING
SUM(quantityOrdered * priceEach) > 60000
ORDER BY
orderTotal;
Code language: SQL (Structured Query Language) (sql)
5) MySQL SUM()
with NULL
example
The SUM()
function returns NULL
if the result set is empty. Sometimes, you may want the SUM()
function to return zero instead of NULL
.
In this case, you can use the COALESCE()
function. The COALESCE
function accepts two arguments and returns the second argument if the first argument is NULL
; otherwise, it returns the first argument.
See the following query:
SELECT
COALESCE(SUM(quantityOrdered * priceEach), 0) result
FROM
orderdetails
WHERE
productCode = 'S1_20';
Code language: SQL (Structured Query Language) (sql)
6) MySQL SUM()
with join example
See the following orders
and orderdetails
tables:
You can use the SUM()
function in a SELECT
with JOIN
clause to calculate the sum of values in a table based on a condition specified by the values in another table.
This statement uses the SUM()
function to calculate the total amounts of the canceled orders:
SELECT
SUM(quantityOrdered * priceEach) cancelled_amount
FROM
orderdetails
INNER JOIN orders USING (orderNumber)
WHERE
status = 'Cancelled';
Code language: SQL (Structured Query Language) (sql)
7) MySQL SUM IF example
The following statement uses the SUM()
function to calculate the number of items sold for each order status:
SELECT
status,
SUM(quantityOrdered)
FROM
orderdetails
INNER JOIN
orders USING (orderNumber)
GROUP BY status;
Code language: SQL (Structured Query Language) (sql)
If you want to rotate rows to columns, you can use the SUM()
fnction with CASE
expression. It is kind of SUMIF
logic:
SELECT
SUM(CASE
WHEN status = 'Shipped' THEN quantityOrdered
END) qty_shipped,
SUM(CASE
WHEN status = 'Resolved' THEN quantityOrdered
END) qty_resolved,
SUM(CASE
WHEN status = 'Cancelled' THEN quantityOrdered
END) qty_cancelled,
SUM(CASE
WHEN status = 'On Hold' THEN quantityOrdered
END) qty_on_hold,
SUM(CASE
WHEN status = 'Disputed' THEN quantityOrdered
END) qty_on_disputed,
SUM(CASE
WHEN status = 'In Process' THEN quantityOrdered
END) qty_in_process
FROM
orderdetails
INNER JOIN
orders USING (orderNumber);
Code language: SQL (Structured Query Language) (sql)
In this tutorial, you have learned how to use the MySQL SUM()
function to calculate the sum of a set of values.
Was this tutorial helpful?
В этом учебном пособии вы узнаете, как использовать MySQL функцию SUM с синтаксисом и примерами.
Описание
MySQL функция SUM возвращает суммарное значение выражения.
Синтаксис
Синтаксис MySQL функции SUM:
SELECT SUM(aggregate_expression)
FROM tables
[WHERE conditions];
ИЛИ Синтаксис MySQL функции SUM при группировке результатов по одному или нескольким столбцам:
SELECT expression1, expression2, … expression_n,
SUM(aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, … expression_n;
Параметры или аргументы
expression1, expression2, … expression_n – выражения, которые не инкапсулированы в функции SUM и должны быть включены в предложение GROUP BY в конце SQL оператора.
aggregate_expression – это столбец или выражение, которое будет суммироваться.
tables – таблицы, из которых вы хотите получить записи. Должна быть хотя бы одна таблица, указанная в предложении FROM.
WHERE conditions – необязательный. Это условия, которые должны быть выполнены для выбранных записей.
Применение
Функция SUM может использоваться в следующих версиях MySQL:
- MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23
Пример с одним выражением
Рассмотрим примеры MySQL функции SUM, чтобы понять, как использовать функцию SUM в MySQL.
Например, вам необходимо узнать какая совокупная общая заработная плата всех сотрудников, чья зарплата превышает 20 000 долларов в год.
SELECT SUM(salary) AS “Total Salary” FROM employees WHERE salary > 20000; |
В этом примере функции SUM, выражению SUM (salary) присвоили псевдонима «Total Salary». В результате при возврате набора результатов в качестве имени поля будет отображаться «Total Salary».
Пример с использование DISTINCT
Вы можете использовать предложение DISTINCT в функции SUM. Например, приведенная ниже инструкция SQL возвращает комбинированный общий оклад уникальных значений заработной платы, где зарплата выше 20 000 долларов в год.
SELECT SUM(DISTINCT salary) AS “Total Salary” FROM employees WHERE salary > 20000; |
Если бы две зарплаты составляли 10 000 долларов в год, в функции SUM использовалось бы только одно из этих значений.
Пример с использованием формулы
Выражение, содержащееся в функции SUM, не обязательно должно быть одним полем. Вы также можете использовать формулу. Например, вы можете рассчитать общую комиссию.
SELECT SUM(sales * 0.05) AS “Total Commission” FROM orders; |
Пример с использованием GROUP BY
В некоторых случаях вам потребуется использовать предложение GROUP BY с функцией SUM.
Например, вы можете использовать функцию SUM, чтобы вернуть department (название отдела) и общий объем sales (продаж в соответствующем отделе).
SELECT department, SUM(sales) AS “Total sales” FROM order_details GROUP BY department; |
Поскольку вы указали один столбец в своем операторе SELECT, который не инкапсулирован в функцию SUM, вы должны использовать предложение GROUP BY. Поэтому поле department должно быть указано в разделе GROUP BY.
Агрегатные функции
Последнее обновление: 21.05.2018
Агрегатные функции вычисляют некоторые скалярные значения в наборе строк. В MySQL есть следующие агрегатные функции:
-
AVG: вычисляет среднее значение
-
SUM: вычисляет сумму значений
-
MIN: вычисляет наименьшее значение
-
MAX: вычисляет наибольшее значение
-
COUNT: вычисляет количество строк в запросе
Все агрегатные функции принимают в качестве параметра выражение, которое представляет критерий для определения значений. Зачастую, в качестве
выражения выступает название столбца, над значениями которого надо проводить вычисления.
Выражения в функциях AVG и SUM должно представлять числовое значение (например, столбец, который хранит числовые значения).
Выражение в функциях MIN, MAX и COUNT может представлять числовое или строковое значение или дату.
Все агрегатные функции за исключением COUNT(*)
игнорируют значения NULL.
Avg
Функция Avg возвращает среднее значение на диапазоне значений столбца таблицы.
Например, пусть есть следующая таблица товаров Products:
CREATE TABLE Products ( Id INT AUTO_INCREMENT PRIMARY KEY, ProductName VARCHAR(30) NOT NULL, Manufacturer VARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price DECIMAL NOT NULL ); INSERT INTO Products(ProductName, Manufacturer, ProductCount, Price) VALUES ('iPhone X', 'Apple', 3, 76000), ('iPhone 8', 'Apple', 2, 51000), ('iPhone 7', 'Apple', 5, 32000), ('Galaxy S9', 'Samsung', 2, 56000), ('Galaxy S8', 'Samsung', 1, 46000), ('Honor 10', 'Huawei', 5, 28000), ('Nokia 8', 'HMD Global', 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), MAX(Price) FROM Products
Данные функции также игнорируют значения NULL и не учитывают их при подсчете.
Sum
Функция Sum вычисляет сумму значений столбца. Например, подсчитаем общее количество товаров:
SELECT SUM(ProductCount) FROM Products
Также вместо имени столбца может передаваться вычисляемое выражение. Например, найдем общую стоимость всех имеющихся товаров:
SELECT SUM(ProductCount * Price) FROM Products
All и Distinct
По умолчанию все вышеперечисленных пять функций учитывают все строки выборки для вычисления результата. Но выборка может содержать повторяющие значения.
Если необходимо выполнить вычисления только над уникальными значениями, исключив из набора значений повторяющиеся данные, то для
этого применяется оператор DISTINCT.
SELECT COUNT(DISTINCT Manufacturer) FROM Products
По умолчанию вместо DISTINCT применяется оператор ALL, который выбирает все строки:
SELECT COUNT(ALL Manufacturer) FROM Products
В данном случае мы видим, что производители могут повторяться в таблице, так как некоторые товары могут иметь одних и тех же производителей. Поэтому
чтобы подсчитать количество уникальных производителей, необходимо использовать оператор DISTINCT.
Так как этот оператор неявно подразумевается при отсутствии DISTINCT, то его можно не указывать.
Комбинирование функций
Объединим применение нескольких функций:
SELECT COUNT(*) AS ProdCount, SUM(ProductCount) AS TotalCount, MIN(Price) AS MinPrice, MAX(Price) AS MaxPrice, AVG(Price) AS AvgPrice FROM Products
script1adsense2code
script1adsense3code
SUM () функция
Функция MySQL SUM () возвращает сумму выражения. Функция SUM () возвращает NULL, если в возвращаемом наборе нет строк.
Синтаксис:
SUM ([DISTINCT] expr)
Где expr это выражение.
Ключевое слово DISTINCT может использоваться для суммирования только различных значений expr.
Версия MySQL: 5.6
Содержание:
- Пример: функция MySQL SUM ()
- Функция MySQL SUM () с предложением и примером where
- MySQL SUM () функция, используя несколько столбцов и пример
- MySQL SUM () функция с функцией COUNT () и переменными и пример
- MySQL SUM () функция с предложением и примером DISTINCT
Пример: функция MySQL SUM ()
Следующий оператор MySQL возвращает сумму ‘total_cost’ из таблицы покупок.
Пример таблицы: покупка
Код:
SELECT SUM(total_cost)
FROM purchase;
Пример вывода:
mysql> SELECT SUM (total_cost) -> С покупки; + ----------------- + | SUM (total_cost) | + ----------------- + | 3590,00 | + ----------------- + 1 ряд в наборе (0,00 сек)
PHP скрипт
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>example-SUM()- php MySQL examples | w3resource</title>
<meta name="description" content="example-SUM()- php MySQL examples | w3resource">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>Sum of total costs of purchases:</h2>
<table class='table table-bordered'>
<tr>
<th>Sum of total costs of purchases</th>
</tr>
<?php
$hostname="your_hostname";
$username="your_username";
$password="your_password";
$db = "your_dbname";
$dbh = new PDO("MySQL:host=$hostname;dbname=$db", $username, $password);
foreach($dbh->query('SELECT SUM(total_cost)
FROM purchase') as $row) {
echo "<tr>";
echo "<td>" . $row['SUM(total_cost)'] . "</td>";
echo "</tr>";
}
?>
</tbody></table>
</div>
</div>
</div>
</body>
</html>
Посмотреть пример в браузере
JSP скрипт
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>example-sum()</title>
</head>
<body>
<%
try {
Class.forName("com.MySQL.jdbc.Driver").newInstance();
String Host ="jdbc:MySQL://localhost:3306/w3resour_bookinfo";
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
connection = DriverManager.getConnection(Host, "root", "datasoft123");
statement = connection.createStatement();
String Data ="SELECT SUM(total_cost) FROM purchase";
rs = statement.executeQuery(Data);
%>
<TABLE border="1">
<tr width="10" bgcolor="#9979">
<td>Sum of total costs of purchases</td>
</tr>
<%
while (rs.next()) {
%>
<TR>
<TD><%=rs.getString("SUM(total_cost)")%></TD>
</TR>
<% } %>
</table>
<%
rs.close();
statement.close();
connection.close();
} catch (Exception ex) {
out.println("Can’t connect to database.");
}
%>
</body>
</html>
Пример: функция MySQL SUM () с предложением where
Функция MySQL SUM () с WHERE извлекает сумму заданного выражения, которая фильтруется по условию, помещенному после WHERE. Следующая инструкция MySQL возвращает сумму «total_cost» из таблицы покупок для категории («cate_id»), заданной предложением WHERE.
Пример таблицы: покупка
Код:
SELECT SUM(total_cost)
FROM purchase
WHERE cate_id='CA001';
Пример вывода:
mysql> SELECT SUM (total_cost) -> ОТ покупки -> ГДЕ cate_id = 'CA001'; + ----------------- + | SUM (total_cost) | + ----------------- + | 1725,00 | + ----------------- + 1 ряд в наборе (0,00 сек)
PHP скрипт
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>example-aggregate-functions-and-grouping-sum-with-where- php MySQL examples | w3resource</title>
<meta name="description" content="example-aggregate-functions-and-grouping-sum-with-where- php MySQL examples | w3resource">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>Sum of total costs of purchases for category id CA001:</h2>
<table class='table table-bordered'>
<tr>
<th>Sum of total costs of purchases for category id CA001</th>
</tr>
<?php
$hostname="your_hostname";
$username="your_username";
$password="your_password";
$db = "your_dbname";
$dbh = new PDO("MySQL:host=$hostname;dbname=$db", $username, $password);
foreach($dbh->query('SELECT SUM(total_cost)
FROM purchase
WHERE cate_id="CA001"') as $row) {
echo "<tr>";
echo "<td>" . $row['SUM(total_cost)'] . "</td>";
echo "</tr>";
}
?>
</tbody></table>
</div>
</div>
</div>
</body>
</html>
Посмотреть пример в браузере
Пример: функция MySQL SUM () с использованием нескольких столбцов
Функция MySQL SUM () извлекает значение суммы выражения, которое состоит из более чем одного столбца. Вышеуказанный оператор MySQL возвращает сумму умножения ‘receive_qty’ и ‘purchase_price’ из таблицы покупок для каждой группы категории (‘cate_id’).
Пример таблицы: покупка
Код:
SELECT cate_id,
SUM(receive_qty*purch_price)
FROM purchase
GROUP BY cate_id;
Пример вывода:
mysql> SELECT cate_id, -> СУММА (receive_qty * purchase_price) -> ОТ покупки -> GROUP BY cate_id; + --------- + ------------------------------ + | cate_id | SUM (receive_qty * purchase_price) | + --------- + ------------------------------ + | CA001 | 1725,00 | | CA002 | 965,00 | | CA003 | 900,00 | + --------- + ------------------------------ + 3 ряда в наборе (0,02 сек)
PHP скрипт
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>example-aggregate-functions-and-grouping-sum-using-multiple-columns- php MySQL examples | w3resource</title>
<meta name="description" content="example-aggregate-functions-and-grouping-sum-using-multiple-columns- php MySQL examples | w3resource">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>Category id and Sum of product of received quantity and purchase price:</h2>
<table class='table table-bordered'>
<tr>
<th>Category id</th><th>Sum of product of received quantity and purchase price</th>
</tr>
<?php
$hostname="your_hostname";
$username="your_username";
$password="your_password";
$db = "your_dbname";
$dbh = new PDO("MySQL:host=$hostname;dbname=$db", $username, $password);
foreach($dbh->query('SELECT cate_id,SUM(receive_qty*purch_price)
FROM purchase
GROUP BY cate_id') as $row) {
echo "<tr>";
echo "<td>" . $row['cate_id'] . "</td>";
echo "<td>" . $row['SUM(receive_qty*purch_price)'] . "</td>";
echo "</tr>";
}
?>
</tbody></table>
</div>
</div>
</div>
</body>
</html>
Посмотреть пример в браузере
Пример: функция MySQL SUM () с функцией COUNT () и переменными
Следующая инструкция MySQL вернет сумму «mysum», временной переменной, которая подсчитывает количество книг, содержащих более 200 страниц из таблицы «book_mast».
Пример таблицы: book_mast
Код:
SELECT SUM(mysum)
FROM(
SELECT COUNT(*) AS mysum
FROM book_mast
WHERE no_page>200) AS bb;
Пример вывода:
mysql> ВЫБЕРИТЕ СУММУ (mysum) -> ОТ ( -> ВЫБЕРИТЕ СЧЕТ (*) AS mysum -> ОТ book_mast -> ГДЕ no_page> 200) AS bb; + ------------ + | СУММ (mysum) | + ------------ + | 12 | + ------------ + 1 ряд в наборе (0,02 сек)
PHP скрипт
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>example-aggregate-functions-and-grouping-sum-with-count-and-variables- php MySQL examples | w3resource</title>
<meta name="description" content="example-aggregate-functions-and-grouping-sum-with-count-and-variables- php MySQL examples | w3resource">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>Returning the sum of the ‘mysum’ a temporary variable which is used to count number of books containing more than 200 pages:</h2>
<table class='table table-bordered'>
<tr>
<th>SUM(mysum)</th>
</tr>
<?php
$hostname="your_hostname";
$username="your_username";
$password="your_password";
$db = "your_dbname";
$dbh = new PDO("MySQL:host=$hostname;dbname=$db", $username, $password);
foreach($dbh->query('SELECT SUM(mysum)
FROM(
SELECT COUNT(*) AS mysum
FROM book_mast where no_page>200) AS bb') as $row) {
echo "<tr>";
echo "<td>" . $row['SUM(mysum)'] . "</td>";
echo "</tr>";
}
?> </tbody></table>
</div>
</div>
</div>
</body>
</html>
Посмотреть пример в браузере
Пример: функция MySQL SUM () с предложением DISTINCT
Функция MySQL SUM () извлекает сумму уникального значения выражения, если оно сопровождается предложением DISTINCT . Следующая инструкция MySQL возвращает сумму количества ветвей (‘no_of_branch’) из таблицы издателей, где, если несколько издателей имеют одинаковое количество ветвей, это число (то есть количество ветвей) берется только один раз.
Пример таблицы: издатель
Код:
SELECT SUM(DISTINCT no_of_branch)
FROM publisher;
Пример вывода:
mysql> SELECT SUM (DISTINCT no_of_branch) -> ОТ издателя; + ---------------------------- + | SUM (DISTINCT no_of_branch) | + ---------------------------- + | 64 | + ---------------------------- + 1 ряд в наборе (0,00 сек)
PHP скрипт
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>example-aggregate-functions-and-grouping-sum-with-distinct- php MySQL examples | w3resource</title>
<meta name="description" content="example-aggregate-functions-and-grouping-sum-with-distinct- php MySQL examples | w3resource">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<h2>Sum of unique number of branches of publishers:</h2>
<table class='table table-bordered'>
<tr>
<th>Sum of unique number of branches of publishers</th>
</tr>
<?php
$hostname="your_hostname";
$username="your_username";
$password="your_password";
$db = "your_dbname";
$dbh = new PDO("MySQL:host=$hostname;dbname=$db", $username, $password);
foreach($dbh->query('SELECT SUM(DISTINCT no_of_branch)
FROM publisher') as $row) {
echo "<tr>";
echo "<td>" . $row['SUM(DISTINCT no_of_branch)'] . "</td>";
echo "</tr>";
}
?>
</tbody></table>
</div>
</div>
</div>
</body>
</html>
Посмотреть пример в браузере
Предыдущая: STDDEV ()
Далее: СУММА () с группировкой по
Introduction to MySQL sum()
- MySQL SUM() is a MySQL aggregate function that calculates the sum of provided set of values. The SUM() avoids the NULL values while evaluating the sum of the data values in MySQL.
- As it is an aggregate function so it implements the sum calculation on multiple values and produces a distinct value.In MySQL, the aggregate functions are normally applied in combination with the GROUP BY clause so that is calculates an aggregate result value for the specific values or group of values mentioned in the query.
- If we are finding the sum of a specific expression, then it may give NULL value when there exists no rows in the result set.
Syntax
We have the subsequent elementary syntax structure for the MySQL SUM() function:
SUM(Expr_Value)
Or
SUM(DISTINCT Expr_Value)
Here, let us explain the syntax terms:
- When the SELECT statement is used with SUM() function that outputs no row, then the MySQL SUM() function will return NULL value but not zero.
- The option DISTINCT keyword is provided to instruct the MySQL SUM() function to evaluate the total of unique values in the set.
- The MySQL SUM() function disregards the NULL values in the sum calculation in the server.
- Expr_Value can be any column name of the specific table. It can be one or multiple separated by comma.
How SUM() function works in MySQL?
The MySQL SUM() function is implemented with SELECT statement and also can be calculated with JOIN clauses.
- We use the MySQL SUM() function along with WHERE clause also to retrieve the result sum of a particular expression that is clarified against a condition positioned after the clause WHERE. This will be helpful to find the sum total of values from a large set of data in the database.
- Suppose, if we need to rotate table rows to table columns then, the SUM() function is used together with the MySQL CASE expression which is a type of SUMIF logic illustrated below:
SELECT
SUM(CASE
WHEN expression…
END) ColumnName1,
SUM(CASE
WHEN expression…
END) ColumnName2,…..,
FROM TableName1 INNER JOIN TableName2 USING(ColumnName);
Here, the syntax shows a CASE statements with SUM() function evaluated for table columns done for the respective tables. The tables are also joined with INNER JOIN and applying the USING keyword to specifycolumn name of the table.
Since, the SUM() is an aggregate function so it works on multiple table rows or of a table column to find the sum result to return only a value.
Examples to Implement MySQL sum()
Let us evaluate the MySQL SUM() to show the working of sum with the table columns and rows to get the result total set.
Example #1. Simple Example of MySQL SUM() function
Let us take a table from the database as a demo table to generate the total sum of column table values.
We have a table named Books having some fields defined with columns as BookID, BookName, Language and Price. To view the contents of this Books table let us query the data:
Code #1
SELECT * FROM Books;
Output:
We are going to use the aggregate SUM() function to fetch the total price of the books from the table quantity using the query below:
Code #2
SELECT SUM(Price)Total_Price FROM Books;
Output:
As shown above, the sum has calculated the sum of total price from the book column.
We can also apply the DISTINCT keyword to find out the unique sum value of unique column values. So, the SUM() function will ignore the duplicate values and NULL values if available in the column values of table.
Code #3
SELECT SUM(DISTINCT Price) Total_Price FROM Books;
Output:
It shows the same sum total because the Price column does not contain any duplicates.
Example #2. with expression
Suppose, we have a table named Suppliers:
Code #1
select * from suppliers;
Output:
For supplier line items of the supplier id 11we have the following query as:
Code #2
SELECT Category, Unit, CostEach FROM Suppliers WHERE Supplier_ID = 11;
Output:
Now, we will calculate the total for a supplier item with Supplier id 11 using MySQL SUM() function:
Code #3
SELECT SUM(Unit * CostEach)TotalCost FROM Suppliers WHERE Supplier_ID = 11;
Output:
Example #3. with GROUP BY clause and ORDER BY clause
We will use SUM() function with GROUP BY clause to produce the sum output by grouping the values based on a specific column of the table.For example, using the SUM() we will query the total price of each supplier itemwith GROUP BY clause:
Code #1
SELECT Supplier_ID, SUM(Unit * CostEach) TotalCost FROM Suppliers GROUP BY Supplier_ID ORDER BY TotalCost DESC;
Output:
Here the result set is grouped by Supplier id and ordered by total cost calculated in descending order.
Example #4. with clause HAVING
The HAVING clause is used with the SUM() function to filter the sum group where the total cost amount is greater than certain provided integer value as follows:
Code #1
SELECT Supplier_ID, SUM(Unit * CostEach) TotalCost FROM Suppliers GROUP BY Supplier_ID
HAVING SUM(Unit * CostEach)>200 ORDER BY TotalCost DESC;
Output:
Example #5. with NULL
If the result set is empty then the SUM() returns NULL value but you can also show zero instead using the COALESCE() with two arguments:
Code #1
SELECT COALESCE (SUM(Unit * CostEach), 0) Output FROM Suppliers WHERE Supplier_ID = 15;
Output:
The result is zero because there is no row with supplier id 15 in the table Suppliers.
Example #6. with JOIN clause
We will take two tables Products and Suppliers where:
Products – Code #1
select * from products;
Output:
Suppliers – Code #2
select * from suppliers;
Output:
Calculating sum by SUM() clause with JOIN clause as follows:
Code #3
SELECT SUM(Unit * CostEach) Product_cost FROM Suppliers INNER JOIN Products ON Supplier_ID WHERE Product_Name = 'Maggie';
Output:
The result sum value is evaluated on the basis of a condition provided by the values in the next table.
Conclusion
- The MySQL SUM() is similar to a mathematical sum calculation that finds out the totality of provided table values in database.
- The aggregate SUM() function is useful to get the summarized data result set of integer data type values especially for those column values of tables containing any product records or eCommerce or business related database.
Recommended Articles
This is a guide to MySQL sum(). Here we discuss an introduction to MySQL sum(), syntax, parameters, how does it work with query examples. You can also go through our other related articles to learn more –
- MySQL GROUP_CONCAT()
- MySQL ON DELETE CASCADE
- MySQL REINDEX
- MySQL LAG()