2016-03-01 49 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

相關問題