MySQL-汇总函数-COUNT,MIN,MAX,AVG和SUM

时间:2020-02-23 14:40:59  来源:igfitidea点击:

在本教程中,我们将学习一些最常用的聚合函数,例如MySQL中的COUNT,MIN,MAX,AVG和SUM。

什么是MySQL中的汇总函数?

这些是MySQL中的函数,它们对一组值执行一些计算,然后返回一个值。

示例:SUM(column_name)函数计算给定列中存在的值的总和。

我们将在本教程中介绍的汇总函数列表。

  • COUNT函数
  • MIN函数
  • MAX函数
  • AVG函数
  • SUM函数

订单表

在本教程中,我们将使用如下所示的" orders"表。

mysql> SELECT * FROM orders;
+---------+------------+--------+-------------+---------------------+---------------------+
| orderid | employeeid | amount | orderstatus | lastmodified        | created             |
+---------+------------+--------+-------------+---------------------+---------------------+
|       1 | e03        |  15.00 | OPEN        | 2016-01-02 03:04:05 | 2016-01-02 03:04:05 |
|       2 | e01        |  25.50 | OPEN        | 2016-01-04 03:04:03 | 2016-01-04 03:04:03 |
|       3 | e05        | 100.70 | CLOSED      | 2016-02-02 03:03:04 | 2016-02-02 03:03:04 |
|       4 | e02        |  22.18 | OPEN        | 2016-01-02 03:04:05 | 2016-01-02 03:04:05 |
|       5 | e04        |   9.50 | CANCELLED   | 2016-01-04 03:04:03 | 2016-01-04 03:04:03 |
|       6 | e04        |  99.99 | OPEN        | 2016-02-02 03:03:04 | 2016-02-02 03:03:04 |
+---------+------------+--------+-------------+---------------------+---------------------+
6 rows in set (0.00 sec)

计数

我们使用COUNT函数来找到匹配给定条件的行数。

语法:

SELECT COUNT(column_name)
FROM table_name;

在以下示例中,我们在" orders"表中列出了订单总数。

mysql> SELECT COUNT(*) FROM orders;
+----------+
| COUNT(*) |
+----------+
|        6 |
+----------+
1 row in set (0.01 sec)

因此,订单表中共有6个订单。

我们甚至可以在上面的查询中使用别名。

mysql> SELECT COUNT(*) AS total_order FROM orders;
+-------------+
| total_order |
+-------------+
|           6 |
+-------------+
1 row in set (0.00 sec)

COUNT个带WHERE子句

语法:

SELECT COUNT(column_name)
FROM table_name
WHERE condition;

在下面的示例中,我们计算的是雇员编号'e04'下的订单总数。

mysql> SELECT COUNT(*) AS total_order FROM orders WHERE employeeid = 'e04';
+-------------+
| total_order |
+-------------+
|           2 |
+-------------+
1 row in set (0.00 sec)

因此,员工编号" e04"共下了2个订单。

计数不同

如果我们要计算一列中的不同值,则可以在COUNT函数中使用DISTINCT。

语法:

SELECT COUNT(DISTINCT column_name)
FROM table_name;

在以下示例中,我们计算下订单的不同员工总数。

mysql> SELECT COUNT(DISTINCT employeeid) AS total_unique_employeeids FROM orders;
+--------------------------+
| total_unique_employeeids |
+--------------------------+
|                        5 |
+--------------------------+
1 row in set (0.00 sec)

因此,订单表中共有5个唯一的employeeid。

MIN

我们使用MIN函数来找到最小值。

语法:

SELECT MIN(column_name)
FROM table_name;

在以下示例中,我们将在订单表中显示最小订单量。

mysql> SELECT MIN(amount) FROM orders;
+-------------+
| MIN(amount) |
+-------------+
|        9.50 |
+-------------+
1 row in set (0.00 sec)

因此,订单表中的最小订单量为9.50。

我们可以为上述查询使用别名。

mysql> SELECT MIN(amount) AS min_amount FROM orders;
+------------+
| min_amount |
+------------+
|       9.50 |
+------------+
1 row in set (0.00 sec)

MIN和WHERE子句

语法:

SELECT MIN(column_name)
FROM table_name
WHERE condition;

在下面的示例中,我们将在订单表中显示雇员编号" e03"的最小订单金额。

mysql> SELECT MIN(amount) AS min_amount FROM orders WHERE employeeid = 'e03';
+------------+
| min_amount |
+------------+
|      15.00 |
+------------+
1 row in set (0.00 sec)

因此,员工编号" e03"的最低订购量为15.00。

最大

我们使用MAX函数来找到最大值。

语法:

SELECT MAX(column_name)
FROM table_name;

在以下示例中,我们将在订单表中显示最大订单金额。

mysql> SELECT MAX(amount) FROM orders;
+-------------+
| MAX(amount) |
+-------------+
|      100.70 |
+-------------+
1 row in set (0.00 sec)

因此,订单表中的最大或者最高订单金额为100.70。

我们可以为给定查询使用别名,如下所示。

mysql> SELECT MAX(amount) AS max_amount FROM orders;
+------------+
| max_amount |
+------------+
|     100.70 |
+------------+
1 row in set (0.00 sec)

带WHERE子句的MAX

语法:

SELECT MAX(column_name)
FROM table_name
WHERE condition;

在下面的示例中,我们将在订单表中显示员工编号'e01'的最大订单金额。

mysql> SELECT MAX(amount) AS max_amount FROM orders WHERE employeeid = 'e01';
+------------+
| max_amount |
+------------+
|      25.50 |
+------------+
1 row in set (0.00 sec)

因此,员工编号" e01"已将最大值定为25.50。

AVG

我们使用AVG函数查找平均值。

语法:

SELECT AVG(column_name)
FROM table_name;

在以下示例中,我们将在订单表中显示平均订单金额。

mysql> SELECT AVG(amount) FROM orders;
+-------------+
| AVG(amount) |
+-------------+
|   45.478333 |
+-------------+
1 row in set (0.00 sec)

因此,订单表中的平均订单金额为45.478333。

我们也可以在上面的查询中使用别名。

mysql> SELECT AVG(amount) AS avg_amount FROM orders;
+------------+
| avg_amount |
+------------+
|  45.478333 |
+------------+
1 row in set (0.00 sec)

带WHERE子句的AVG

语法:

SELECT AVG(column_name)
FROM table_name
WHERE condition;

在下面的示例中,我们将在订单表中显示员工编号'e04'的平均订单金额。

mysql> SELECT AVG(amount) AS avg_amount FROM orders WHERE employeeid = 'e04';
+------------+
| avg_amount |
+------------+
|  54.745000 |
+------------+
1 row in set (0.00 sec)

因此,员工编号" e04"下的平均订单金额为54.745000。

我们使用SUM函数来求和。

语法:

SELECT SUM(column_name)
FROM table_name;

在以下示例中,我们将在订单表中显示总金额,即订单金额的总计。

mysql> SELECT SUM(amount) FROM orders;
+-------------+
| SUM(amount) |
+-------------+
|      272.87 |
+-------------+
1 row in set (0.00 sec)

因此,订单表中的总订单金额为272.87。

使用别名时,输出将如下所示。

mysql> SELECT SUM(amount) AS total_amount FROM orders;
+--------------+
| total_amount |
+--------------+
|       272.87 |
+--------------+
1 row in set (0.00 sec)

带WHERE子句的SUM

语法:

SELECT SUM(column_name)
FROM table_name
WHERE condition;

在以下示例中,我们将在订单表中显示总金额,即OPEN订单的订单金额总计。

mysql> SELECT SUM(amount) AS open_order_total_amount FROM orders WHERE orderstatus = 'OPEN';
+-------------------------+
| open_order_total_amount |
+-------------------------+
|                  162.67 |
+-------------------------+
1 row in set (0.00 sec)

因此,处于"打开"状态的所有订单的总订单金额为162.67。