任何人都可以帮助我如何计算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 |
+--------------------+-----------------------+
任何人都可以帮我解决这个问题。
答案 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将始终为两个元素返回相同的行数,因为它们只能是相同的行数。
你需要做两个计数,每个表一个,你正在研究的条件。