我试图计算今年(2014年)任何工作假定超过三次的所有人。按月分组。要记住的一件事是表的大小是72 GB,所以我试图使查询尽可能高效。我使用了以下查询,但它没有给我任何结果。有人可以告诉我什么是错的,或者最好的方法是什么?
select month(postulationdate), count(idpostulant) from postulations
where postulationdate >= '2014-01-01'
and idpostulant = (select count(idpostulant) >= 3)
group by 1
如果有任何疑问,我会回答它。
答案 0 :(得分:1)
您可以使用HAVING
子句根据聚合进行过滤:
SELECT month(postulationdate), count(idpostulant)
FROM postulations
WHERE postulationdate >= '2014-01-01'
GROUP BY month(postulationdate)
HAVING count(idpostulant) >= 3
如果您在postulationdate
上有索引,则会加快WHERE
子句中的初始过滤。
更新:您可能在2014年的总数中表示> = 3,然后按月分解,您可以这样做:
SELECT month(postulationdate), count(idpostulant)
FROM postulations AS a
WHERE postulationdate >= '2014-01-01'
AND EXISTS(SELECT idpostulant
FROM postulations AS b
WHERE postulationdate >= '2014-01-01'
AND a.idpostulent = b.idpostulent
GROUP BY idpostulant
HAVING count(idpostulant) >= 3)
GROUP BY month(postulationdate)