【问题标题】:How can i get count of each month in current year SQL?如何获取当年 SQL 中每个月的计数?
【发布时间】:2019-03-27 23:17:40
【问题描述】:

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

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

如您所见,我有所有月份和他们的计数。但我只需要当年的数据。我该如何整合这个条件?

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

谢谢!

【问题讨论】:

  • 添加 where 条件 ....
  • WHERE YEAR(reg_date) = YEAR(CURDATE())
  • 很确定你也可以使用 MONTH(reg_date) 而不是 extract
  • @RiggsFolly 非常感谢:D
  • @RiggsFolly 我会使用 WHERE reg_date BETWEEN '2018-01-01' AND '2018-12-31' 来使用 reg_date 的索引(如果有的话)

标签: php mysql sql date


【解决方案1】:
  • 执行Group By 时不需要使用Distinct
  • 我们可以使用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

【讨论】:

  • @maximepihin 从未使用过它。但问题是什么?我可以试着弄清楚。
  • 看,我有 2 个请求:Yii::$app->db->createCommand('SELECT MONTH(reg_date) AS Months, COUNT(*) AS RegCount FROM users WHERE YEAR(reg_date) = YEAR(NOW()) ORDER BY Months')->queryAll(); -> 有一些数据,但在 $this->find()->select(['MONTH(reg_date) AS Months', 'COUNT(*) AS RegCount'])->where(['YEAR(reg_date)' => 'YEAR(NOW())'])->groupBy('Months')->all(); -> 什么都没有……为什么?来自模型用户的请求!
  • @maximepihin hmm - 两者看起来都一样。抱歉,不知道为什么会这样。也许有一些小技巧。您可以向 SO 社区提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多