需要sub sql select的总和但需要sub select中的变量

时间:2012-12-06 06:28:29

标签: sql postgresql jira

我正在为现有软件(Atlassian Jira)构建SQL QUERY,并且无法对数据库进行任何更改。

我们在Jira(table:jiraissue)中有几个问题,它们在一个单独的表(table:worklog)中有0到n个工作日志条目。每个工作日志还具有记录工作的用户的用户ID,并且用户是一个或多个用户组的成员。这些问题中的每一个(表格:jir​​aissue)都与另一个问题相关联(在另一个jira项目中,但这是 - 我认为 - 与非jira专家无关),其中共同作为“成本单位”。

意味着我们想知道每个“成本单位”记录了多少工作。因此,我们需要有一个查询,它返回所有“成本单位”和每个用户组在链接问题上记录的时间。最后一点是,“成本单位”是市场的组成部分,以了解哪个“成本单位”属于一起。因此,要仅显示与报表用户相关的“成本单位”,查询正在使用该组件进行选择。

我到目前为止发现的效果相当不错,但是因为存在相关问题而返回“成本单位”的行数,但我需要所有相关问题的总和。

我不知何故应该能够从子查询中总结所有结果,但这些似乎是不可能的。我还试图在FROM之后使用subselect语句,但后来我无法使用jiraissue.id。

这是我的实际查询:

SELECT 
  myktr.pkey,
  myktr.summary,
  sum(worklog_dev),
  (SELECT 
    sum(worklog.timeworked) 
  from
    worklog 
  WHERE worklog.issueid = jiraissue.id 
    AND worklog.author IN 
    (SELECT 
      child_name 
    FROM
      CWD_MEMBERSHIP 
    where lower_parent_name = 'jira-team-sdqm')) AS worklog_sdqm,
  (SELECT 
    sum(worklog.timeworked) 
  from
    worklog 
  WHERE worklog.issueid = jiraissue.id 
    AND worklog.author IN 
    (SELECT 
      child_name 
    FROM
      CWD_MEMBERSHIP 
    where lower_parent_name = 'jira-productowner')) AS worklog_pm 
FROM
  component,
  nodeassociation,
  jiraissue AS myktr 
  INNER JOIN issuelink 
    ON (issuelink.source = myktr.id) 
  INNER JOIN jiraissue 
    ON (
      issuelink.destination = jiraissue.id
    ),
  (SELECT 
    sum(worklog.timeworked) AS worklog_dev 
  FROM
    worklog 
  WHERE worklog.issueid = jiraissue.id 
    AND worklog.author IN 
    (SELECT 
      child_name 
    FROM
      CWD_MEMBERSHIP 
    where lower_parent_name = 'jira-developers')) AS worklog_dev_table 
WHERE myktr.pkey IN 
  (SELECT 
    jiraissue.pkey 
  from
    jiraissue,
    project 
  WHERE project.id = jiraissue.project 
    AND project.pkey = 'KTR') 
  AND component.ID = nodeassociation.SINK_NODE_ID 
  and myktr.id = nodeassociation.SOURCE_NODE_ID 
  and nodeassociation.ASSOCIATION_TYPE = 'IssueComponent' 
  and component.cname = 'Project-Component' ;
你对我有什么建议吗? fyi:我们正在使用postgreSQL。

最好的问候, 斯特凡

1 个答案:

答案 0 :(得分:1)

为使您的聚合正常工作,您需要在主要选择中使用GROUP BY - 子句:

...
GROUP BY component
...