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


谁能帮助我该怎么做。

最佳答案

这些计数有一个很好的技巧:

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)给出与条件完全匹配的行数。

关于mysql - MySQL计数与语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10930462/

10-14 14:01
查看更多