如何获得当年SQL中每个月的计数?

时间:2018-10-23 16:26:22

标签: php mysql sql date

我需要获取当前年度每月的行数。我有带有字段reg_date的SQL数据库,其中包含格式为2018-10-10(年月日)的日期。 看,我写了这个SQL请求并得到结果:

SELECT distinct extract(month from reg_date) as Months, 
       COUNT(*) as RegCount 
FROM Orders 
GROUP BY Months

Database result

如您所见,我拥有全部月份及其计数。但是我只需要本年度的数据。如何整合这种情况?

重复:我需要当前年度每月的行数。

谢谢!

1 个答案:

答案 0 :(得分:1)

    在执行Distinct时不需要使用
  • Group By
  • 我们可以使用Month()Year()函数分别从日期中提取月份和年份。

为了只考虑当年的行,我们可以使用:

WHERE YEAR(reg_date) = YEAR(CURDATE())

但是,在Where子句中的列上使用函数会妨碍在reg_date列上使用索引(如果已定义)。因此,我们可以改用以下内容:

WHERE reg_date BETWEEN '2018-01-01' AND '2018-12-31'

为了使其更通用(不可知年份),我们可以改为执行以下操作:

WHERE reg_date 
      BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND 
              LAST_DAY(DATE_ADD(NOW(), INTERVAL 12-MONTH(NOW()) MONTH))

OR,

WHERE reg_date 
      BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND 
              MAKEDATE(YEAR(CURDATE()), IF(MOD(YEAR(CURDATE()), 4), 365, 366))

请尝试以下查询:

SELECT MONTH(reg_date) AS Months, 
       COUNT(*) AS RegCount 
FROM Orders 
WHERE reg_date 
      BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND 
              MAKEDATE(YEAR(CURDATE()), IF(MOD(YEAR(CURDATE()), 4), 365, 366))
GROUP BY Months