MySQL计数与声明

时间:2012-06-07 11:00:16

标签: mysql count

任何人都可以帮助我如何计算jq.batchid != 0 and tl.taskqueueid IS NOT NULL

以下是初始数据:

+---------------+-----------+---------+---------------+
|  taskqueueid  |  batchid  |  jobid  |  taskqueueid  |
+---------------+-----------+---------+---------------+
|      19       |     0     |   140   |     (NULL)    |
+---------------+-----------+---------+---------------+
|      21       |    103    |   140   |       21      |
+---------------+-----------+---------+---------------+
|      22       |    104    |   140   |       22      |
+---------------+-----------+---------+---------------+
|      23       |    105    |   140   |     (NULL)    |
+---------------+-----------+---------+---------------+
|      20       |     0     |   140   |     (NULL)    |
+---------------+-----------+---------+---------------+

这是我的问题:

SELECT COUNT(jq.batchid),COUNT(tl.taskqueueid)
  FROM jobqueue jq
  LEFT JOIN taskslogs tl
    ON jq.taskqueueid=tl.taskqueueid
   AND jq.documentgroupid=0
   AND jq.batchid!=0
   AND tl.statusDefinitionID=1
 WHERE jq.jobid=140;

以上查询结果为:

+--------------------+-----------------------+
| COUNT(jq.batchid)  | COUNT(tl.taskqueueid) |
+--------------------+-----------------------+
|         5          |           2           |
+--------------------+-----------------------+

我想得到一个结果:

+--------------------+-----------------------+
| COUNT(jq.batchid)  | COUNT(tl.taskqueueid) |
+--------------------+-----------------------+
|         3          |           2           |
+--------------------+-----------------------+

任何人都可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

这种计数有一个非常好的技巧:

SELECT
    SUM(jq.batchid > 0) as nb_batchid_positive,
    SUM(tl.taskqueueid IS NOT NULL) as nb_taskqueueid_not_null
FROM jobqueue jq
LEFT JOIN taskslogs tl
    ON jq.taskqueueid=tl.taskqueueid
    AND jq.documentgroupid=0
    AND tl.statusDefinitionID=1
WHERE jq.jobid=140;

SUM(BOOLEAN CONDITION)为您提供与条件匹配的行数。

答案 1 :(得分:1)

如果进行左连接,count将始终为两个元素返回相同的行数,因为它们只能是相同的行数。

你需要做两个计数,每个表一个,你正在研究的条件。