我正在尝试在我们的数据库上运行报告。我们希望了解每个行业每月的新注册情况。我写过这个问题:
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';
它返回我正在寻找的结果。
请帮忙吗?我很难过。
更新:查询将在每个月末或过去一个月的下一个月开始运行。所以,我们现在是六月份,但它需要在五月份运行。希望这是有道理的。
答案 0 :(得分:2)
做什么:
SELECT MONTHNAME(NOW())
退回服务器?
答案 1 :(得分:1)
Errr ....这不是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是否是唯一的。
答案 2 :(得分:0)
可以更好地编写此查询:
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_id进行分组(我假设是主键)比按字符串(industry_name和monthname)分组更快。最后,如果您只选择一个月,则不需要按月分组。
但是,假设您的表中包含当前实际月份的信息,您应该获得正确的数据。