MySQL--聚合与排序

本文详细介绍了MySQL中的聚合查询,包括count、sum、avg、max、min等聚合函数的使用,以及如何删除重复值。同时,讲解了如何利用group by进行分组,使用having指定分组条件,并探讨了order by子句进行排序的各种细节,如升序、降序、多个排序列和null的处理。
摘要由CSDN通过智能技术生成

本文所用的知识点、例子和语法均参考《SQL基础教程》第2版。
本章主要内容有:

  • 对表进行聚合查询
  • 对表进行分组
  • 为聚合结果指定条件
  • 对查询结果进行排序

1 对表进行聚合查询

聚合函数通常用来对表中的列进行计算和或者平均值等。聚合函数不能对null进行汇总,但是count函数可以,count(*)可以查出包含null在内的全部数据的行数。
distinct删除重复值的操作在前面我们已经见过。

聚合函数

常用的5个函数:

  • count:计算表中的记录数(行数)
  • sum:计算表中数值列中数据的合计值
  • avg:计算表中数值列中数据的平均值
  • max:求出表中任意列中数据的最大值
  • min:求出表中任意列中数据的最小值

所谓聚合函数就是输入多行输出一行。

计算表中数据的行数

计算全部数据的行数用count,例如:

mysql> select count(*) from product;
+----------+
| count(*) |
+----------+
|        8 |
+----------+

也可以计算某一列中非空行数

mysql> select count(purchase_price) from product;
+-----------------------+
| count(purchase_price) |
+-----------------------+
|                     6 |
+-----------------------+

括号中带星号是count函数特有的,其他函数如果用星号作参数会报错。count(*)会得到包含null的数据行数,而count(<列名>)会得到null之外的数据行数。

计算合计值

使用sum函数来求销售单价和进货单价的合计值。

mysql> select sum(sale_price),sum(purchase_price) from product;
+-----------------+---------------------+
| sum(sale_price) | sum(purchase_price) |
+-----------------+---------------------+
|           16780 |               12210 |
+-----------------+---------------------+

purchase_price列中有两个空值,在计算和的时候,并不是将两个空值当作0处理,而是有null的两行被无视,不算到计算中去。

计算平均值

计算销售单价和进货单价的平均值,当计算purchase_price时,有两个空值,先把两个空值去掉,然后将剩余不是空值的数加和在取平均(除以的是6不是8)

mysql> select avg(sale_price),avg(purchase_price) from product;
+-----------------+---------------------+
| avg(sale_price) | avg(purchase_price) |
+-----------------+---------------------+
|       2097.5000 |           2035.0000 |
+-----------------+---------------------+

计算最大值和最小值

max、min与sum、avg不同的是,后两个只能对数值类型的列使用,而前两个原则上可适用于任何数据类型的列。

mysql> select max(sale_price),min(purchase_price),max(regist_date),min(regist_date) from product;
+-----------------+---------------------+------------------+------------------+
| max(sale_price) | min(purchase_price) | max(regist_date) | min(regist_date) |
+-----------------+---------------------+------------------+------------------+
|            6800 |                 320 | 2009-11-11       | 2008-04-28       |
+-----------------+---------------------+------------------+------------------+

使用聚合函数删除重复值(用distinct)

可在count函数中使用distinct来去重。

mysql> select count(distinct product_type)
    -> from product;
+------------------------------+
| count(distinct product_type) |
+------------------------------+
|                            3 |
+------------------------------+

观察下使用distinct和不使用distinct的结果,以sale_price为例。

mysql> select sum(sale_price),sum(distinct sale_price) from product;
+-----------------+--------------------------+
| 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值