Postgresql如何分组并保留所有列?

时间:2016-05-11 14:49:11

标签: ruby-on-rails

我知道有类似的问题,但我认为我有一个独特的情况。

我正在尝试为Redmine 3开发一个插件。使用Postgresql。

有一个名为TimeEntry的表,其中包含一个日志文件,用户可以在哪个问题上工作。

我有一个名为TimeEntry的表,就像这样;

ID      user_id   project_id    issue_id    hours
1       1         1             1           6
2       1         2             1           5
3       1         1             1           3
4       2         2             1           2
5       1         1             2           7
6       3         1             2           8
7       2         2             1           4

我正在为其项目ID获取此表。但是你可以看到那里有一些重复的行。我想把它们变成一个并将它们的时间合计为一个。

例如,具有1和3的ID。相同的用户在同一问题中的同一项目中工作。我试图让它看起来像一排,但他们的小时总和,如9。

我可以通过在ActiveRecord中进行分组来实现这一点,但还有一个问题。由于我使用Rails 4,我需要访问问题主题。为此我正在做的例如,TimeEntry.first.issue.subject给了我这个问题的主题。

如果我在Rails Console中执行此操作,我只会得到一些这样的数组;

TimeEntry.group(:issue_id).sum(:hours)
=> {1=>9.0, 2=>5.0}

但是通过这种方式我无法访问此项目的问题,因为不再有issue_id了。

我怎样才能解决这个问题?

感谢。 PS:我没有在stackoverflow上提问的经验,所以如果我做错了什么或其他什么,请善待。也可能存在一些语法问题,因为英语不是我的母语。

1 个答案:

答案 0 :(得分:0)

TimeEntry
  .group(:user_id, :issue_id)
  .select('user_id, issue_id, sum(hours) as hours')

这应返回每个用户/问题对的TimeEntry列表。对于每个TimeEntry,只会设置3个字段:

  • user_id
  • issue_id
  • hours属性,该属性将是该对中所有小时数的总和