2012-09-10 43 views
0

我试图从我的'jobs'表中有'已完成'状态的所有记录进行计数,排除任何'fix-it'或'vacancy'作业类型的作业。这是我使用的是什么,但我不知道这是给我正确的结果:mySQL计数功能

SELECT id, client_id, COUNT(*) AS count FROM jobs 
WHERE jobType != 'fix-it' AND jobType != 'vacancy' AND status = 'completed' 
GROUP by jobs.client_id 

然后我看结果,看我有一个给定的客户端下的两个或更多个已完成的作业。

这看起来正确吗?

+0

你能发布一个小例子数据吗?你的代码看起来不错,只是想测试一些东西。 – TARehman

+0

如果“jobType”为NULL,是否要查看这些记录?为什么在查询中选择“id”?你认为这是告诉你什么? – pilcrow

+0

是的,我想查看这些记录。他们不会被包括在内,因为我正在使用!=来过滤? NULL不等于'空缺'或'修复它',因此它会包含在内吗? 只要'身份证'去,你是对的,我不需要它。 – Jeremy

回答

2

你可以用一个NOT IN条款代替两个jobtype东西,让事情变得更清晰......

WHERE jobType NOT IN ('fix-it', 'vacancy') AND ... 

否则它看起来不错

0

此作品在SQL Server中,不知道MySQL的:

SELECT id, client_id, COUNT(*) AS count FROM jobs 
WHERE jobType != 'fix-it' AND jobType != 'vacancy' AND status = 'completed' 
GROUP by jobs.client_id 
HAVING Count(*) > 1 
+0

它不会工作。你会得到“选择非集合字段不在组中”的错误。 SQL服务器很愚蠢。 –

+0

我实际上做了> 1计数检查使用PHP,所以这不是一个问题。我主要担心上述查询是否会产生预期的结果,因为我对使用COUNT很陌生。 – Jeremy

+0

@Marc B的评论是非常真实的,你必须添加ID和客户端ID在SQL服务器组 –