Как мне объединить несколько значений в операторе AND OR в Postgresql

#postgresql #filter #count

#postgresql #Фильтр #количество

Вопрос:

Я использую следующий скрипт при вызове моей базы данных:

 SELECT 
 1.0*(COUNT(*) FILTER(WHERE "stitch_jira"."issues"."fields__status__statusCategory__name"='Done'
 AND "stitch_jira"."issues"."fields__project__key"='FLUM'
 AND "stitch_jira"."issues"."fields__issuetype__name"='Task'
 OR "stitch_jira"."issues"."fields__issuetype__name"='Story'))/
 (COUNT(*) FILTER(WHERE "stitch_jira"."issues"."fields__status__statusCategory__name" IN('To Do','In Progress','Done')
 AND "stitch_jira"."issues"."fields__project__key"='FLUM'
 AND "stitch_jira"."issues"."fields__issuetype__name"='Task'
 OR "stitch_jira"."issues"."fields__issuetype__name"='Story'))
FROM "stitch_jira"."issues"
  

В принципе, это должно заключаться в получении выполненных задач и историй, а затем в делении их на общее количество задач и историй. Результаты не демонстрируют этого. ЭТО работает нормально, если я выполняю только задачи или только истории, но не тогда, когда я делаю и то, и другое.

Где я ошибся?

Комментарии:

1. Вы имеете в виду, что результат отличается от разделения отдельных результатов? Это меня удивило бы.

Ответ №1:

Правильный ответ был следующим:

 SELECT 
 1.0*
 ((COUNT(*) FILTER(WHERE "stitch_jira"."issues"."fields__status__statusCategory__name"='Done'
 AND "stitch_jira"."issues"."fields__project__key"='FLUM'
 AND "stitch_jira"."issues"."fields__issuetype__name"='Task'))
  
 (COUNT(*) FILTER(WHERE "stitch_jira"."issues"."fields__status__statusCategory__name"='Done'
 AND "stitch_jira"."issues"."fields__project__key"='FLUM'
 AND "stitch_jira"."issues"."fields__issuetype__name"='Story')))
 /
 ((COUNT(*) FILTER(WHERE "stitch_jira"."issues"."fields__status__statusCategory__name" IN('To Do','In Progress','Done')
 AND "stitch_jira"."issues"."fields__project__key"='FLUM'
 AND "stitch_jira"."issues"."fields__issuetype__name"='Task'))
  
 (COUNT(*) FILTER(WHERE "stitch_jira"."issues"."fields__status__statusCategory__name" IN('To Do','In Progress','Done')
 AND "stitch_jira"."issues"."fields__project__key"='FLUM'
 AND "stitch_jira"."issues"."fields__issuetype__name"='Story')))
FROM "stitch_jira"."issues"
  

Проблема заключалась в том, что условие OR было недостаточно жестко привязано, и оно извлекало данные в своих вычислениях за пределами отфильтрованного проекта.