Сумма всегда возвращается к 1 в MySQL - PullRequest
1 голос
/ 14 мая 2019

Я объединяю две таблицы task и taskdetail

select t.task_id,td.task_id,td.task_detail_id,td.status 
from task t , task_detail td 
where td.task_id=t.task_id and td.status='ACTIVE'

Возвращается 5 записей.Но для task id 5 есть два taskdetail, которые являются активными, поэтому я хочу иметь еще один столбец как totalactive, который должен иметь сумму значений всех ACTIVE для задачи.Для этого я добавил:

SUM(CASE WHEN sd.status='ACTIVE' THEN 1 else 0 END) as totalactive and ``GROUP BY td.task_detail_id

но он возвращает 1 во всех случаях.

Результат

+---+---------+---------+----------------+----------+-------------+
|No | task_id | task_id | task_detail_id |  status  | totalactive |
+---+---------+---------+----------------+----------+-------------+
| 1 |    2    |    2    |       3        |  ACTIVE  |      1      |
| 2 |    3    |    3    |       5        |  ACTIVE  |      1      |
| 3 |    4    |    4    |       6        |  ACTIVE  |      1      |
| 4 |    5    |    5    |       8        |  ACTIVE  |      1      |
| 5 |    5    |    5    |       9        |  ACTIVE  |      1      |
+---+---------+---------+----------------+----------+-------------+

поскольку есть 8,9 два task detail против одной задачи 5 я хочу иметь счет 2 в последней строке

Ответы [ 3 ]

1 голос
/ 14 мая 2019

Вам нужно сгруппировать по td.task_id или t.task_id

select t.task_id, td.task_id, td.task_detail_id, count(1) as totalactive
  from task t 
  join task_detail td on td.task_id=t.task_id 
 where td.status='ACTIVE'
 group by td.task_id

или

select t.task_id, td.task_id, td.task_detail_id,
       sum(case when td.status='ACTIVE' then 1 else 0 end) as totalactive
  from task t 
  join task_detail td on td.task_id=t.task_id      
 group by td.task_id

, чтобы не считать отдельно для каждого task_detail_id

Демо

0 голосов
/ 15 мая 2019

вы должны заменить как подзапрос (SELECT COUNT(*) FROM task_detail tdd where tdd.task_id=t.task_id and tdd.status='ACTIVE') as totalActive

  select t.task_id,td.task_id,td.task_detail_id,td.status ,(SELECT COUNT(*) FROM task_detail tdd where tdd.task_id=t.task_id and tdd.status='ACTIVE') as totalActive
  from task t , task_detail td 
  where td.task_id=t.task_id and td.status='ACTIVE'

Возвращает общее количество задач по сравнению с задачей.

0 голосов
/ 14 мая 2019

Вы пробовали с запросом:

select t.task_id,td.task_id,td.task_detail_id,td.status, count(status) as numberActive  
from task t , task_detail td 
where td.task_id=t.task_id and td.status='ACTIVE'
group by td.task_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...