08,select查询子句group分组及统计函数

一、select的五个统计函数

应用场景

1、max,min,sum,avg

比如选出最贵的商品
select max(shop_price) from goods;
同理可应用于最小,求和,求平均。

2、count

比如想统计本店一共有多少种商品
select count(*) from goods;

这里,count里面用*,用数字0,1或者用字段“good_id”都可以。
但是,不同的字段,还是有不同的效果的。

count里面参数不同的区别:

  • count(*),查询的就是绝对的行数,哪怕某一行所有字段全文null,也会计算在内。(用count(1)也差不多,区别不是很大)
  • count(列名)查询的是该列不为null的所有行的行数。

具体的例子,如下:

对于表test8来说,有两个列名id与name。

若是我们用count(*),效果就是计算所有行,结果等于3.

若是用列名,则只会计算该字段下不为null的行数。
比如对于id字段,有2个不为null,对于name字段只有1个不为null。

上面是5个统计函数,单独使用意义不大,要和分组配合起来使用。

二、group的使用与5个统计函数的配合

2.1、分组的应用场景

2.1.1计算第4个栏目(即cat_id=4)下所有商品的库存量之和

这个很简单,用sum加上where筛选即可。

2.1.2一次计算完,每个栏目下的库存量之和

可以用“分成两步”来理解。

  • 把商品按照cat_id字段分组
  • 再按组用sum统计求库存量

有多少组,就有多少行

应用上面的查询子句时,要注意能够对应。比如,下面的查询语句就不正确。(因为没有哪一个good_id能够对应所有商品的库存量,一个good_id=2的商品只能对应good_id=2的库存量)

因此,我们应该使其对应,比如求cat_id的平均价格,那么就应该用group分组,使得有几个cat_id,就有几个对应的平均价格。如下:

你可能感兴趣的:(08,select查询子句group分组及统计函数)