有人能帮我讲讲如何计算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 |
+--------------------+-----------------------+有没有人能教我该怎么做。
发布于 2012-06-07 19:14:00
对于这些类型的计数,有一个非常好的技巧:
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(布尔条件)给出了与条件完全匹配的行数。
发布于 2012-06-07 19:12:00
如果执行左连接,count将始终为两个元素返回相同的行数,因为它们只能返回相同的行数。
您将需要进行两次计数,对于您正在查看的条件,每个表一次。
https://stackoverflow.com/questions/10930462
复制相似问题