如何获得当前年度sql中每个月的计数?

a64a0gku  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(372)

我需要得到今年每月的行数。我有一个sql数据库,带有reg\u date字段,其中包含格式为date的日期 2018-10-10 (年月日)。听着,我写了这个sql请求,结果是:

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


如你所见,我有所有的月份和他们的计数。但我只需要当年的数据。如何整合这个条件?
重复:我需要今年每月的行数。
谢谢!

ipakzgxi

ipakzgxi1#

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))

或者,

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

相关问题