我在试着在我们的数据库上运行一份报告。我们想知道每个行业每月的新注册人数。我写了这个查询:
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());当我运行这个查询时,我得到一个空的结果集。但是,如果我运行以下命令:
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月份。希望这是有意义的。
发布于 2009-06-03 14:05:50
错误..。这不是May O_o
如果你这样写,你的查询会更有效率:
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是否是唯一的。
发布于 2009-06-03 14:05:35
什么功能:
SELECT MONTHNAME(NOW())在您的服务器上返回?
发布于 2009-06-03 14:14:12
下面的查询可以写得更好:
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 )进行分组要快。最后,如果您只选择单月,则不需要按月分组。
但是,假设您的表包含实际当月的信息,那么您应该获得正确的数据。
https://stackoverflow.com/questions/944932
复制相似问题