0

谁能帮我计算我应该如何计算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           |
+--------------------+-----------------------+

任何人都可以帮助我如何做到这一点。

4

2 回答 2

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) 为您提供与条件匹配的行数。

于 2012-06-07T11:14:00.147 回答
1

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

你需要做两个计数,每个表一个一个,用于你正在调查的条件。

于 2012-06-07T11:11:59.683 回答