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

左結合を行う場合、カウントは両方の要素に対して常に同じ行数を返します。これは、同じ行数にしかならないためです。

調べている状態について、テーブルごとに 1 つずつ、2 つのカウントを行う必要があります。

于 2012-06-07T11:11:59.683 に答える