SQL聚集函数

阅读:130

上一节我们讲到如何SQL如何使用函数。本节开始,开始介绍SQL使用聚集函数,以及如何利用聚集函数做汇总表的数据。

1. 聚集函数

很多时候,我们不是直接检索出数据,而是对检索出的数据做汇总,比如:

  • 计算检索出的总行数
  • 找出所有行或者某些特定行的最大值、最小值、平均值。

上面的需求是返回汇总的数据,而不需要实际的数据都返回。试想,在数据量大的时候,返回实际数据纯属浪费资源。

那么什么是聚集函数呢?

聚集函数,就是对一组值进行计算,并返回单一值。

SQL提供了5个聚集函数,这些聚集函数很好满足了我们的汇总需求,幸运的是,SQL的聚集函数在各个DBMS软件中都是兼容的。5个聚集函数如下:

  • AVG(),返回某列的平均值
  • COUNT(),返回某列的行数
  • MAX(),返回某列的最大值
  • MIN(),返回某列的最小值
  • SUM(),返回某列的值之和

2. AVG()函数

求返回的列平均值。括号内接收到的参数是列名,下面求所有的商品的平均价格:

mysql> SELECT AVG(pro_price) FROM t_product;
+----------------+
| AVG(pro_price) |
+----------------+
|    7971.428571 |
+----------------+
1 row in set (0.01 sec)

 

注意,AVG()函数会自动忽略列值为NULL的行。

3. COUNT()函数

返回符合条件的行数的和。

下面我来求商品的条数,有如下方式:

第一种:

mysql> SELECT COUNT(id) FROM t_product;
+-----------+
| COUNT(id) |
+-----------+
|         7 |
+-----------+
1 row in set (0.00 sec)

因为id是主键,是唯一的,可以看到总共7行数据。

第二种:

mysql> SELECT COUNT(*) FROM t_product;
+----------+
| COUNT(*) |
+----------+
|        7 |
+----------+
1 row in set (0.00 sec)

注意,星号不会忽略值为NULL的列。

第三种:

mysql> SELECT COUNT(pro_name) FROM t_product;
+-----------------+
| COUNT(pro_name) |
+-----------------+
|               5 |
+-----------------+
1 row in set (0.00 sec)

可以看到忽略了pro_name为NULL的列。

第四种:

mysql> SELECT COUNT(1) FROM t_product;
+----------+
| COUNT(*) |
+----------+
|        7 |
+----------+
1 row in set (0.00 sec)

可以看到效果和COUNT(*)一样,不会忽略为NULL值的列。

4. MAX()函数

返回某列的最大值,参数必须指定列名。这里注意以下几点:

  • 必须指定参数,参数为列名。
  • 忽略NULL值的列。
  • 对非数值的列求最大值时,在不同的DBMS有可能不同。有的返回该列排序后的最后一行。

 

求商品的最大值:

mysql> SELECT MAX(pro_price) FROM t_product;
+----------------+
| MAX(pro_price) |
+----------------+
|       13900.00 |
+----------------+
1 row in set (0.01 sec)

5. MIN()函数

和MAX函数相反,返回某列的最小值,参数必须指定列名。这里注意以下几点:

  • 必须指定参数,参数为列名。
  • 忽略NULL值的列。
  • 对非数值的列求最大值时,在不同的DBMS有可能不同。有的返回该列排序后的最前面一行。

 

求商品最小值:

mysql> SELECT MIN(pro_price) FROM t_product;
+----------------+
| MIN(pro_price) |
+----------------+
|        3900.00 |
+----------------+
1 row in set (0.00 sec)

6. SUM()函数

返回某列的值之和。注意一下两点:

  • 忽略NULL值的列。
  • SUM()函数可以执行算术运算,通过指定多个列或值。

 

现在我们求所有商品的价格总和,并乘以2,当然也可以指定其它列进行算术运算。

mysql> SELECT SUM(pro_price * 2) FROM t_product;
+--------------------+
| SUM(pro_price * 2) |
+--------------------+
|          111600.00 |
+--------------------+
1 row in set (0.00 sec)

 

 

总结:

  • SQL提供了5中聚合函数,并且各DBMS都很好的支持。
  • 聚合函数可以组合使用。
  • 聚合函数除了COUNT函数外,都忽略NULL值。如果COUNT函数参数指定的是具体的列,同样忽略NULL值。

读后有收获,请作者喝杯咖啡

全部评论

发表评论
更多精彩内容,请关注微信公众号