[英]How to write this query MYSQL
我有这个数据库:
| id | name | email | control_number | created | | | | | |
|:--:|-------|-----------------|----------------|------------|---|---|---|---|---|
| 1 | john | john@gmail.com | 1 | 14/09/2016 | | | | | |
| 2 | carl | carl@gmail.com | 1 | 13/08/2016 | | | | | |
| 3 | frank | frank@gmail.com | 2 | 12/08/2016 | | | | | |
我想通过control_number获取过去12个月中的COUNT。
基本上是一个COUNT,其中control_number = 1,但按月计。
因此,如果查询在今天(9月)完成,则应从9月开始到2015年10月,并显示每个月的记录数。
结果应为:
09/2016 = 50
08/2016 = 35
07/2016 = 20
06/2016 = 50
05/2016 = 21
04/2016 = 33
03/2016 = 60
02/2016 = 36
01/2016 = 11
12/2015 = 0
11/2015 = 0
10/2015 = 0
嗯。 获取0值可能很棘手。 假设您每个月都有一些数据(即使不是“ 1”),则可以执行以下操作:
select extract(year_month from created) as yyyymm,
sum(control_number = 1)
from t
where created >= date_sub(curdate(), interval 12 month)
group by extract(year_month from created)
order by yyyymm;
如果您每个月都没有至少一条记录,那么您将需要一个left join
和一个每月有一行的表。
尝试这个:
select CONCAT(SUBSTRING(ym, 5, 2), '/', SUBSTRING(ym, 1, 4)) Month, Count from (
select EXTRACT(YEAR_MONTH FROM created) ym, count(*) Count
from mytable
where EXTRACT(YEAR_MONTH FROM created) > (EXTRACT(YEAR_MONTH FROM SUBDATE(NOW(), INTERVAL 1 YEAR))
group by 1
order by 1 desc) x
尝试:
select concat(month(created),'/',year(created)) as period, count(*) as cnt
from mytable
where control_number=1 and TIMESTAMPDIFF(year, created, now())=0
group by (month(created));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.