探索mysql avg函数工作原理

版权声明:欢迎评论,指点,交流! https://blog.csdn.net/qq_15230053/article/details/81631979
#探索mysql avg 原理
#首先建表
drop table if exists avg_test;
create table avg_test(
  company_name varchar(20),
  create_date date,
  quantity int);

#造数据
insert into avg_test value ('a','2018-08-01',23);
insert into avg_test value ('a','2018-08-01',20);
insert into avg_test value ('a','2018-08-01',8);
insert into avg_test value ('b','2018-08-01',5);
insert into avg_test value ('b','2018-08-01',20);
insert into avg_test value ('a','2018-08-02',6);
insert into avg_test value ('a','2018-08-02',9);
insert into avg_test value ('a','2018-08-02',3);

#显示数据
mysql> select * from avg_test;
+--------------+-------------+----------+
| company_name | create_date | quantity |
+--------------+-------------+----------+
| a            | 2018-08-01  |       23 |
| a            | 2018-08-01  |       20 |
| a            | 2018-08-01  |        8 |
| b            | 2018-08-01  |        5 |
| b            | 2018-08-01  |       20 |
| a            | 2018-08-02  |        6 |
| a            | 2018-08-02  |        9 |
| a            | 2018-08-02  |        3 |
+--------------+-------------+----------+


#直接用quntity的和除以记录数,得到平均值
mysql> select avg(quantity) from avg_test;
+---------------+
| avg(quantity) |
+---------------+
|       11.7500 |
+---------------+


#根据company_name分组,求和然后求平均(每天的都被求和然后除以公司个数)
mysql> select avg(quantity) from avg_test group by company_name;
+---------------+
| avg(quantity) |
+---------------+
|       11.5000 |
|       12.5000 |
+---------------+



#某个公司某一天内的所有行平均数,就是说a公司2018-8-1有多个记录,
# 把多个2018-8-1求个除以a公司2018-8-1的个数
mysql> select company_name,create_date,avg(quantity) from avg_test
    -> group by company_name,create_date;
+--------------+-------------+---------------+
| company_name | create_date | avg(quantity) |
+--------------+-------------+---------------+
| a            | 2018-08-01  |       17.0000 |
| b            | 2018-08-01  |       12.5000 |
| a            | 2018-08-02  |        6.0000 |
+--------------+-------------+---------------+


#某个公司每一天的平均,就是先把每个公司每天的和求出来,然后在把每个公司的和求出来  除以   每个公司的天数
mysql> select company_name,avg(quantity) from
    ->   (select
    ->      sum(quantity) as quantity,
    ->      company_name,
    ->      create_date
    ->    from avg_test
    ->    group by company_name,create_date) t1
    -> group by company_name;
+--------------+---------------+
| company_name | avg(quantity) |
+--------------+---------------+
| a            |       34.5000 |
| b            |       25.0000 |
+--------------+---------------+

猜你喜欢

转载自blog.csdn.net/qq_15230053/article/details/81631979