mysql必知必会第12章(聚集函数)


title: mysql必知必会第12章
date: 2021-07-11 09:56:13
tags:


一、聚集函数

我们经常需要汇总数据而不用把它们实际检索出来,为此mysql提供了专门的函数。如果返回实际数据,不仅效率低,还浪费处理资源,带宽资源。
另外:这些函数是高效设计的,一般比你在客户机应用程序中计算的块,所以合理利用。

mysql常用的5个聚集函数(运行在行组上,计算和返回单个值的函数)


1.avg()
```sql
select avg(prod_price) from products;
+-----------------+
| avg(prod_price) |
+-----------------+
|       16.133571 |
+-----------------+
//tips:1、只能用来确定特定数值列的平均值,且必须以列名作为参数。
(但其实参数随便传一个非数值类型但列进去也有数据,但这没意义。)
//2、为了获得多列的平均值,必须使用多个avg函数。
//3、avg函数忽略列值为null的行  
```

2.count()

有2种使用方式

// 第一种:使用count(*)对表(即对所有列)中行的数目进行计数,不管表列中包含的是空值(null)还是非空值。
select count(*) from customers;
+----------+
| count(*) |
+----------+
|        5 |
+----------+
//第二种:使用count(列名)对特定列中具有值的行进行计数,忽略null值。
 select count(cust_email) from customers
+-------------------+
| count(cust_email) |
+-------------------+
|                 3 |
+-------------------+
mysql> select cust_email from customers;
+---------------------+
| cust_email          |
+---------------------+
| ylee@coyote.com     |
| NULL                |
| rabbit@wascally.com |
| sam@yosemite.com    |
| NULL                |
+---------------------+

3,4.max()和min()

max()返回指定列中的最大值,要求指定列名。
min()返回指定列中的最小值,要求指定列名。
tips:

  • 2个函数都可以对非数值的数据列进行使用,对文本数据列使用时,如果是按照默认的升序排列数据,则max()返回的是最后一行数据。min()则相反。
  • 2个函数都忽略列值为null的行。
//遇到了有趣的事情:
select min(prod_price) as prod_price from products;'
+------------+
| prod_price |
+------------+
|       2.50 |
+------------+
1 row in set (0.00 sec)

    '> sjdj
    '> ;
    '> ;
    '> n;
    '> bye;
    '> quit;
    '> '
    -> ';
    '> ';
//最后发现输入 '; 按回车又回来了 mysql> 这种。

5、sum()

sum()函数用来返回指定列值的和(总计)

 select sum(quantity) from orderitems where order_num=20005;
+---------------+
| sum(quantity) |
+---------------+
|            19 |
+---------------+
//还可以在里面进行运算。其实所有聚集函数都可以。
select sum(quantity*item_price) from orderitems where order_num=20005;
+--------------------------+
| sum(quantity*item_price) |
+--------------------------+
|                   149.87 |
+--------------------------+

聚集不同值

distinct是去重,all是默认的不去重

//计算去重后的数据的均值
mysql> select avg(distinct prod_price) from products where vend_id=1003;
+--------------------------+
| avg(distinct prod_price) |
+--------------------------+
|                15.998000 |
+--------------------------+
//计算数据的均值后再去重,但此时算完后数据行只有一条,去个毛线,所以这个distinct在此条sql中相当于没效果。
mysql> select distinct avg(prod_price) from products where vend_id=1003;
+-----------------+
| avg(prod_price) |
+-----------------+
|       13.212857 |
+-----------------+
select avg( prod_price) from products where vend_id=1003;
+------------------+
| avg( prod_price) |
+------------------+
|        13.212857 |
+------------------+

tips:
distinct不能用于count(*)
不能用于计算或表达式
distinct用在max()、min()中没意义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值