如何在Postgresql中的AND OR语句中合并多个值

时间:2019-03-03 09:44:28

标签: postgresql filter count

我在调用数据库时使用以下脚本:

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"

基本上,应该获得完成的任务和故事,然后将其除以任务和故事的总数。结果似乎无法证明这一点。如果我仅执行任务或仅执行故事,但当我同时执行两个任务时,则IT工作正常。

我哪里出错了?

1 个答案:

答案 0 :(得分:0)

正确答案如下:

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条件的绑定不够紧密,它正在将计算中的数据提取到过滤后的项目之外。