MySQL数据查询---使用集合/聚合函数查询

MySQL聚合函数如下:

函数作用
avg()返回某列的平均值
count()返回某列的行数
max()返回某列的最大值
min()返回某列的最小值
sum()返回某列值的和

(1)count()函数
(2)sum()函数
(3)avg()函数
(4)max()函数
(5)min()函数


(1)count()函数
  • count()函数统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数,有两种使用方法:
    ①count(*)计算表中总的行数,不管某列有数值或者为空值。
    ②count(字段名)计算指定列下总的行数,计算时将忽略空值的行。

【例1】查询customers表中总的行数,SQL语句如下:

mysql> select count(*) as cust_num
    -> from customers;
+----------+
| cust_num |
+----------+
|        4 |
+----------+
1 row in set (0.06 sec)

由查询结果可知,count(*)返回customers表中记录的总行数,不管其值是什么。返回的总数的名称为cust_num。

【例2】查询customers表中有电子邮箱的顾客的总数,SQL语句如下:

mysql> select count(c_email) as email_num
    -> from customers;
+-----------+
| email_num |
+-----------+
|         3 |
+-----------+
1 row in set (0.00 sec)

上面两个例子结果不同说明两种方式在计算总数的时候对待null值的方式不同,即指定列的值为空的行被count()函数忽略,但是如果不指定列,而在count()函数中使用*,则所有记录都不忽略。

【例3】在orderitems表中,使用count()函数与group by关键字一起使用,用来计算不同分组中的记录总数。

mysql> select o_num,count(f_id)
    -> from orderitems
    -> group by o_num;
+-------+-------------+
| o_num | count(f_id) |
+-------+-------------+
| 30001 |           4 |
| 30002 |           1 |
| 30003 |           1 |
| 30004 |           1 |
| 30005 |           4 |
+-------+-------------+
5 rows in set (0.00 sec)
(2)sum()函数
  • sum是一个求总和的函数,返回指定列值的总和。

【例】在orderitems表中查询30005号订单一共购买的水果总量,SQL语句如下:

mysql> select sum(quantity) as items_total
    -> from orderitems
    -> where o_num = 30005;
+-------------+
| items_total |
+-------------+
|          30 |
+-------------+
1 row in set (0.05 sec)

sum()可以和group by一起使用,用来计算每个分组的总和。

【例】在orderitems表中,使用sum()函数统计不同订单号中订购的水果总量,SQL语句如下:

mysql> select o_num,sum(quantity) as items_total
    -> from orderitems
    -> group by o_num;
+-------+-------------+
| o_num | items_total |
+-------+-------------+
| 30001 |          33 |
| 30002 |           2 |
| 30003 |         100 |
| 30004 |          50 |
| 30005 |          30 |
+-------+-------------+
5 rows in set (0.00 sec)

sum函数在计算时,忽略值为null的行。

(3)avg()函数
  • avg()函数通过计算返回的行数和每一列数据的和,求得指定列数据的平均值。
  • avg()函数使用时,其参数为要计算的列名称,如果要得到多个列的多个平均值,则需要在每一列上使用avg()函数。

【例1】在fruits表中,查询s_id=103的供应商的水果价格的平均值,SQL语句如下:

mysql> select avg(f_price) as avg_price
    -> from fruits
    -> where s_id = 103;
+-----------+
| avg_price |
+-----------+
|  5.700000 |
+-----------+
1 row in set (0.05 sec)

【例2】在fruits表中,查询每一个供应商的水果价格的平均值,SQL语句如下:

mysql> select s_id,avg(f_price) as avg_price
    -> from fruits
    -> group by s_id;
+------+-----------+
| s_id | avg_price |
+------+-----------+
|  104 |  7.000000 |
|  101 |  6.200000 |
|  103 |  5.700000 |
|  107 |  3.600000 |
|  102 |  8.933333 |
|  105 |  7.466667 |
|  106 | 15.700000 |
+------+-----------+
7 rows in set (0.00 sec)

group by 关键字根据s_id字段对记录进行分组,然后计算出每个分组的平均值,这种分组求平均值的方法非常有用。例如,求不同班级学生成绩的平均值,求不同部门工人的平均工资,求各地的年平均气温等。

(4)max()函数
  • max()返回指定列中的最大值。
  • max()函数除了用来找出最大的列值或日期值之外,还能返回任意列中的最大值,包括返回字符类型的最大值。

【例1】在fruits表中查找市场上价格最高的水果值,SQL语句如下:

mysql> select max(f_price) as max_price from fruits;
+-----------+
| max_price |
+-----------+
|     15.70 |
+-----------+
1 row in set (0.05 sec)

【例2】在fruits表中查找不同供应商提供的价格最高的水果值,SQL语句如下:

mysql> select s_id,max(f_price) as max_price
    -> from fruits
    -> group by s_id;
+------+-----------+
| s_id | max_price |
+------+-----------+
|  104 |      7.60 |
|  101 |     10.20 |
|  103 |      9.20 |
|  107 |      3.60 |
|  102 |     11.20 |
|  105 |     11.60 |
|  106 |     15.70 |
+------+-----------+
7 rows in set (0.00 sec)

【例3】在fruits表中查找f_name的最大值,SQL语句如下:

mysql> select max(f_name) from fruits;
+-------------+
| max(f_name) |
+-------------+
| xxxx        |
+-------------+
1 row in set (0.00 sec)
(5)min()函数
- min()返回查询列中的最小值。

【例1】在fruits表中查找市场上价格最低的水果值,SQL语句如下:

mysql> select min(f_price) as min_price
    -> from fruits;
+-----------+
| min_price |
+-----------+
|      2.20 |
+-----------+
1 row in set (0.00 sec)

【例2】在fruits表中查找不同供应商提供的价格最低的水果汁,SQL语句如下:

mysql> select s_id,min(f_price) as min_price
    -> from fruits
    -> group by s_id;
+------+-------------+
| s_id | min_price |
+------+-------------+
|  104 |        6.40 |
|  101 |        3.20 |
|  103 |        2.20 |
|  107 |        3.60 |
|  102 |        5.30 |
|  105 |        2.60 |
|  106 |       15.70 |
+------+-------------+
7 rows in set (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hudie.

不要打赏!不要打赏!不要打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值