我需要得到今年每月的行数。我有一个带有reg_date字段的SQL数据库,其中包含格式为2018-10-10
(年-月-日)的日期。
听着,我写了这个SQL请求,结果是:
SELECT distinct extract(month from reg_date) as Months,
COUNT(*) as RegCount
FROM Orders
GROUP BY Months
如你所见,我有一个月和他们的计数。但我只需要当年的数据。如何整合此条件?
重复:我需要本年度每月的行数。
谢谢!
最佳答案
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
关于php - 如何获得当年SQL中每个月的计数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52953775/