MySQL——聚合函数知识点

8 篇文章 0 订阅
7 篇文章 0 订阅

聚合函数

聚合函数——SQL中用于汇总的函数

常用的聚合函数

COUNT:计算行数
SUM:计算数据求和
AVG:计算数据平均值
MAX:求出一列数据的最大值
MIN:求出一列数据的最小值

下面以商品明细表(product_details)为例:

mysql> select * from product_details;
+------------+--------------+--------------+------------+----------------+-------------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date |
+------------+--------------+--------------+------------+----------------+-------------+
| 001        | T恤衫        | 衣服         |       1000 |            500 | 2009-09-20  |
| 002        | 打孔器       | 办公用品     |        500 |            320 | 2009-09-11  |
| 003        | 运动T恤      | 衣服         |       4000 |           2800 | NULL        |
| 004        | 菜刀         | 厨房用具     |       3000 |           2800 | 2009-09-20  |
| 005        | 高压锅       | 厨房用具     |       6800 |           5000 | 2009-01-15  |
| 006        | 叉子         | 厨房用具     |        500 |           NULL | 2009-09-20  |
| 007        | 擦菜板       | 厨房用具     |        880 |            790 | 2008-04-28  |
| 008        | 圆珠笔       | 办公用品     |        100 |           NULL | 2009-11-11  |
+------------+--------------+--------------+------------+----------------+-------------+
8 rows in set (0.01 sec)

COUNT函数

通过COUNT后括号内的输入值即参数(parameter),得出输出值即返回值。
1.COUNT(* )——计算全部列的行数
SELECT COUNT(* ) FROM 表名称;

2.COUNT(列名称)——计算单独列的行数
SELECT COUNT(列名称) FROM 表名称;

注:由于存在NULL数据,因此COUNT(*)和COUNT(列名称)得出的返回值可能存在差异

mysql> -- 计算所有列包括NULL的数据行数
mysql> select count(*) from product_details;
+----------+
| count(*) |
+----------+
|        8 |
+----------+
1 row in set (0.00 sec)

mysql> -- 计算单独列会得到除开NULL以外的数据行数
mysql> select count(purchase_price) from product_details;
+-----------------------+
| count(purchase_price) |
+-----------------------+
|                     6 |
+-----------------------+
1 row in set (0.04 sec)

SUM函数

1.单列求和计算:SELECT SUM(列名称) FROM 表名称;

2.多列求和计算:SELECT SUM(列名称),SUM(列名称),… FROM 表名称;

注:1.四则运算中,存在NULL,返回值一定是NULL。
2.聚合函数中,以列名为参数,会将NULL排除在外来进行计算,不影响计算结果。

mysql> -- 单列求和计算
mysql> select sum(sale_price) from product_details;
+-----------------+
| sum(sale_price) |
+-----------------+
|           16780 |
+-----------------+
1 row in set (0.00 sec)

mysql> -- 多列求和计算
mysql> select sum(sale_price),sum(purchase_price) from product_details;
+-----------------+---------------------+
| sum(sale_price) | sum(purchase_price) |
+-----------------+---------------------+
|           16780 |               12210 |
+-----------------+---------------------+
1 row in set (0.00 sec)

AVG函数

1.单列求平均值:SELECT AVG(列名称) FROM 表名称;

2.多列求平均值:SELECT AVG(列名称), AVG(列名称),… FROM 表名称;

mysql> -- 单列求平均值
mysql> select avg(sale_price) from product_details;
+-----------------+
| avg(sale_price) |
+-----------------+
|       2097.5000 |
+-----------------+
1 row in set (0.00 sec)

mysql> -- 多列求平均值
mysql> select avg(sale_price),avg(purchase_price) from product_details;
+-----------------+---------------------+
| avg(sale_price) | avg(purchase_price) |
+-----------------+---------------------+
|       2097.5000 |           2035.0000 |
+-----------------+---------------------+
1 row in set (0.00 sec)

MAX/MIN函数

SELECT MAX/MIN(列名称) FROM 表名称;

注:MAX/MIN函数几乎适用于所有数据类型的列,只要是能够排序的数据。

mysql> -- 计算数值类型列的最大值或者最小值
mysql> select max(sale_price),min(purchase_price) from product_details;
+-----------------+---------------------+
| max(sale_price) | min(purchase_price) |
+-----------------+---------------------+
|            6800 |                 320 |
+-----------------+---------------------+
1 row in set (0.01 sec)

mysql> -- 计算日期类型列的最大值或者最小值
mysql> select max(regist_date),min(regist_date) from product_details;
+------------------+------------------+
| max(regist_date) | min(regist_date) |
+------------------+------------------+
| 2009-11-11       | 2008-04-28       |
+------------------+------------------+
1 row in set (0.00 sec)

聚合函数+DISTINCT

如何删除重复值后计算数据:
SELECT COUNT/SUM/AVG/MIN/MAX(DISTINCT 列名称) FROM 表名称;

mysql> -- 删除重复值后统计行数
mysql> select count(distinct product_type),count(product_type) from product_details;
+------------------------------+---------------------+
| count(distinct product_type) | count(product_type) |
+------------------------------+---------------------+
|                            3 |                   8 |
+------------------------------+---------------------+
1 row in set (0.01 sec)

mysql> -- 删除重复值后求和
mysql> select sum(distinct sale_price),sum(sale_price) from product_details;
+--------------------------+-----------------+
| sum(distinct sale_price) | sum(sale_price) |
+--------------------------+-----------------+
|                    16280 |           16780 |
+--------------------------+-----------------+
1 row in set (0.00 sec)

未完待续。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值