使用带有计数的子查询

时间:2014-04-08 17:17:22

标签: mysql sql subquery

我试图计算今年(2014年)任何工作假定超过三次的所有人。按月分组。要记住的一件事是表的大小是72 GB,所以我试图使查询尽可能高效。我使用了以下查询,但它没有给我任何结果。有人可以告诉我什么是错的,或者最好的方法是什么?

select month(postulationdate), count(idpostulant) from postulations
where postulationdate >= '2014-01-01'
and idpostulant = (select count(idpostulant) >= 3)
group by 1

如果有任何疑问,我会回答它。

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)