MySQL : weekly and monthly average

标签 mysql sql database

这是我的帐单表:

shop_id | billing_date | total
------------------------------
ABC     | 2016-03-07   | 100
ABC     | 2016-03-14   | 200
DEF     | 2016-03-07   | 300
DEF     | 2016-03-14   | 100
GHI     | 2016-03-07   | 30

我想要为每个商店获取一条线路,其中包含每周平均总计当月总计以及每月平均总计 。最终数据必须如下所示:

shop | weekly avg. | current month total | monthly avg.
-------------------------------------------------------
ABC  | 150         | 300                 | 300
DEF  | 200         | 500                 | 500
GHI  | 30          | 30                  | 30

我的问题是:是否可以直接从 SQL 查询中获取这些信息?

最佳答案

嘿,您可以使用 mysql 的 WEEKMONTH 尝试当年的这种方式。根据表中的数据条目每周:

SQLFIDDLE

select shop_id,(sum(total)/(WEEK(MAX(bdate)) - WEEK(MIN(bdate))+1)) as weekly_avg,(sum(total)/(MONTH(MAX(bdate))-MONTH(MIN(bdate))+1)) as mothly_avg, sum( case when MONTH(bdate) = MONTH(NOW()) then total else 0 end) as current_month_total  from bill group by shop_id WHERE YEAR(bdate) = 2016

对于大于一的年份

SQL FIDDLE

select shop_id,
sum(total)/(12 * (YEAR(MAX(bdate)) - YEAR(MIN(bdate))) + (MONTH(MAX(bdate)) - MONTH(MIN(bdate)))+1) as month_avg,
sum(total)/(7 * (YEAR(MAX(bdate)) - YEAR(MIN(bdate))) + (WEEK(MAX(bdate)) - WEEK(MIN(bdate)))+1) as weekly_avg,
sum( case when YEAR(bdate) = YEAR(bdate) and MONTH(bdate) = MONTH(NOW()) then total else 0 end) as current_month_total from bill group by shop_id

关于MySQL : weekly and monthly average,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35984344/

相关文章:

sql - 在什么情况下 SELECT by PRIMARY KEY 会很慢?

php - 如果另一条记录无法保存/存储,如何回滚新记录

database - Django - 设计模型关系 - 管理界面和内联

mysql - 不删除我在数据库中的记录

mysql - Sequelize MySql 等效 ORM 查询

mysql - 在 1 次查询中选择 5 条前一条记录、中间条和 5 条后一条记录

sql - 在 PostgreSQL 中使用 POSIX 正则表达式比使用 LIKE 和 ILIKE 有什么优势?

php - 当我尝试绑定(bind)值(甚至准备语句)时,为什么这个 SQL 查询返回 false?

mysql - 将参数附加到mysql中的表名

SQL 服务器 : How to seperate XML nodes in different rows