首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 5上MONTHNAME()的问题

MySQL 5上MONTHNAME()的问题
EN

Stack Overflow用户
提问于 2009-06-03 14:00:48
回答 3查看 945关注 0票数 1

我在试着在我们的数据库上运行一份报告。我们想知道每个行业每月的新注册人数。我写了这个查询:

代码语言:javascript
复制
SELECT 
  COUNT(j.jobseeker_id) as new_registrations, 
  i.description as industry_name,
  MONTHNAME(j.created_at)
FROM
  tb_jobseeker as j, tb_industry as i
WHERE 
  YEAR(j.created_at) = 2009 
AND 
  i.industry_id = j.industry_id 
GROUP BY 
  i.description, MONTHNAME(j.created_at)
HAVING
  MONTHNAME(j.created_at) =  MONTHNAME(NOW());

当我运行这个查询时,我得到一个空的结果集。但是,如果我运行以下命令:

代码语言:javascript
复制
SELECT 
  COUNT(j.seeker_id) as new_registrations, 
  i.description as industry_name,
  MONTHNAME(j.created_at)
FROM
  tb_seeker as j, tb_industry as i
WHERE 
  YEAR(j.created_at) = 2009 
AND 
  i.industry_id = j.industry_id 
GROUP BY 
  i.description, MONTHNAME(j.created_at)
HAVING
  MONTHNAME(j.created_at) =  'June';

它返回我想要的结果。

有什么需要帮忙的吗?我被难住了。

更新:查询将在上个月的每个月底或下一个月开始时运行。所以,我们现在是6月份,但它需要运行到5月份。希望这是有意义的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-03 14:05:50

错误..。这不是May O_o

如果你这样写,你的查询会更有效率:

代码语言:javascript
复制
SELECT 
  COUNT(j.jobseeker_id) as new_registrations, 
  i.description as industry_name,
  MONTHNAME(j.created_at)
FROM
  tb_jobseeker as j, tb_industry as i
WHERE 
  j.created_at BETWEEN '2009-05-01' AND '2009-05-31'
AND 
  i.industry_id = j.industry_id 
GROUP BY 
  i.description, MONTH(j.created_at)

只有在万不得已的情况下才应该使用HAVING。

如果您可以按i.id而不是i.description进行分组,那会更好,但这取决于i.description是否是唯一的。

票数 1
EN

Stack Overflow用户

发布于 2009-06-03 14:05:35

什么功能:

代码语言:javascript
复制
SELECT MONTHNAME(NOW())

在您的服务器上返回?

票数 2
EN

Stack Overflow用户

发布于 2009-06-03 14:14:12

下面的查询可以写得更好:

代码语言:javascript
复制
SELECT 
 COUNT(j.jobseeker_id) as new_registrations, 
 i.description as industry_name,
 MONTHNAME(j.created_at)
FROM
  tb_jobseeker as j, tb_industry as i
WHERE 
  YEAR(j.created_at) = YEAR(NOW())
  AND MONTH(j.created_at) =  MONTH(NOW())
  AND i.industry_id = j.industry_id 
GROUP BY 
  i.industry_id

"HAVING“子句是在分组之后应用的;如果您希望根据聚合结果进行筛选(例如,获取上个月申请人数> 100人的所有行业),则需要应用它。按月份进行分组(我假设它是主键)比按字符串(industry_name和industry_id )进行分组要快。最后,如果您只选择单月,则不需要按月分组。

但是,假设您的表包含实际当月的信息,那么您应该获得正确的数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/944932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档