簡體   English   中英

如何在MySQL中特定日期范圍內計數

[英]How to count at specific date range in mysql

我創建了此mysql代碼以僅在特定日期范圍內進行計數,我轉儲了mysql代碼的輸出,此處為:

SELECT COUNT(
                IF(
                        DATE(q.date_emailed) BETWEEN '2014-02-01' AND '2014-02-28',
                        1,
                        0
                    )
        ) AS 'Feb', 
        COUNT(
                    IF(
                        DATE(q.date_emailed) BETWEEN '2014-03-01' AND '2014-03-31',
                        1,
                        0
                    )
         ) AS 'March', 
         COUNT(
                    IF(
                        DATE(q.date_emailed) BETWEEN '2014-01-01' AND '2014-01-31',
                        1,
                        0
                    )
         ) AS 'Jan' 
        FROM
            database.quotes q
        WHERE (DATE(q.date_emailed) BETWEEN '2014-01-01' AND '2014-03-31')

但這每月輸出相同的計數,其中我確認2月和3月計數為零。 我在這里想念什么?

COUNT()計算非空值。 您可以改用sum()來修復代碼。 您也可以通過刪除if語句來簡化它:

SELECT SUM(DATE(q.date_emailed) BETWEEN '2014-02-01' AND '2014-02-28') AS Feb, 
       SUM(DATE(q.date_emailed) BETWEEN '2014-03-01' AND '2014-03-31') AS March, 
       SUM(DATE(q.date_emailed) BETWEEN '2014-01-01' AND '2014-01-31') AS Jan
FROM database.quotes q
WHERE DATE(q.date_emailed) BETWEEN '2014-01-01' AND '2014-03-31';

在MySQL中,布爾結果對於“ false”被視為0對於“ true”被視為1 這是一個極大的方便,它允許您使用sum()來計算匹配數。

請注意,我還刪除了列名周圍的單引號。 單引號應用於字符串和日期常量,而不用於標識符。

編輯:

通過使用q.date_emailed上的索引,可以使此查詢運行更快。 但是,我不認為由於date()函數會使用索引。 您可以通過更改邏輯來解決此問題:

SELECT SUM(DATE(q.date_emailed) BETWEEN '2014-02-01' AND '2014-02-28') AS Feb, 
       SUM(DATE(q.date_emailed) BETWEEN '2014-03-01' AND '2014-03-31') AS March, 
       SUM(DATE(q.date_emailed) BETWEEN '2014-01-01' AND '2014-01-31') AS Jan
FROM database.quotes q
WHERE q.date_emailed >= '2014-01-01' AND
      q.date_emailed < '2014-04-01';

如果要累加0和1,則應使用SUM而不是COUNT。

COUNT將對行數進行計數,SUM將對這些值求和。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM