2016-03-01 46 views
0

创建帖子的目的是,根据我现在遇到的情况我无法找到案例,想要从截止日期的金额超过1,而不是减或等于零如果字段值大于1并且不小于零,则Mysql Count datediff总行数

如果它已经存在张贴相同,因为它没有找到适当的情况下的例子,我很抱歉。我只需要按照我的情况的例子为例

我的数据库

id   userid   duedate    status 
1   lexter   2016-01-27   not yet paid 
2   jemmy   2016-02-01   not yet paid 
3   zaya   2016-03-02   already paid 
4   randy   2016-08-09   not yet paid 
5   max    2016-03-08   not yet paid 
6   neo    2016-03-14   already paid 
7   nemo   2016-01-09   not yet paid 

这个MySQL查询

SELECT duedate, 
    current_date() as datenow, 
    count(datediff(current_date(), duedate) as late_payment) as late_payment 
FROM 
    mydb 
WHERE 
    status='not yet paid' 

我的查询只虽然他指望所有记录的小于零或大于零,并且我只想要大于零的记录并且尚未付款将被计数。

回答

1

这被称为条件计数,你可以通过sum()或count()来完成。您需要将case语句或if()放入组中。我将展示的例子对count():

SELECT duedate, 
    current_date() as datenow, 
    count(case when datediff(current_date(), duedate) >0 then 1 else null end) as late_payment_count 
FROM 
    mydb 
WHERE 
    status='not yet paid' 
group by duedate, current_date() 

可以简化条件,因为datediff(current_date(), duedate) >0其实是一样的current_date() > duedate

如果您有兴趣的逾期付款的只数,那么你就可以进一步简化您的查询作为

SELECT duedate, 
    current_date() as datenow, 
    count(*) as late_payment_count 
FROM 
    mydb 
WHERE 
    status='not yet paid' and current_date() > duedate 
group by duedate, current_date() 
+0

感谢您的回复,这是真棒,但怎么算都记录其中late_payment不是零和> = 1? – SRL

+1

如果您只需要一个数字,那么只需将计数保留在选择列表中,并删除group by子句。 – Shadow

+0

谢谢..问题修正.. – SRL

相关问题