Rails 中的多列分组和总计

发布于 2024-10-20 11:40:34 字数 806 浏览 3 评论 0 原文

我的数据看起来像这样

 ___________________________________
|name  date      status    location |
|Tom   1/1/2010  Ready     Home     |
|Tom   1/1/2010  Ready     Home     |
|Bill  1/18/2010 Go        Work     |
|Bob   2/19/2010 Ready     Field    |
|Bob   2/19/2010 Ready     Field    |
|Wil   4/5/2010  Steady    Work     |
|Wil   4/5/2010  Steady    Work     |
|Wil   4/5/2010  Steady    Work     |
|Wil   4/5/2010  Steady    Home     |
|Bill  7/14/2010 Stop      Home     |
|___________________________________| 

我需要对其进行分组/计数,以便看起来像这样

Name   Date      Location    Status   Count
Tom    1/1/2010  Home        Ready    2
Bill   1/18/2010 Work        Go       1
Bill   7/14/2010 Home        Stop     1
Bob    2/19/2010 Field       Ready    2
etc.....

my data looks like this

 ___________________________________
|name  date      status    location |
|Tom   1/1/2010  Ready     Home     |
|Tom   1/1/2010  Ready     Home     |
|Bill  1/18/2010 Go        Work     |
|Bob   2/19/2010 Ready     Field    |
|Bob   2/19/2010 Ready     Field    |
|Wil   4/5/2010  Steady    Work     |
|Wil   4/5/2010  Steady    Work     |
|Wil   4/5/2010  Steady    Work     |
|Wil   4/5/2010  Steady    Home     |
|Bill  7/14/2010 Stop      Home     |
|___________________________________| 

i need to group/count it so that looks like this

Name   Date      Location    Status   Count
Tom    1/1/2010  Home        Ready    2
Bill   1/18/2010 Work        Go       1
Bill   7/14/2010 Home        Stop     1
Bob    2/19/2010 Field       Ready    2
etc.....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空城仅有旧梦在 2024-10-27 11:40:34

有时,根据数据的格式和属性,执行此操作的最佳方法很棘手。但一般来说,您可以使用 :group 参数“nofollow">ActiveRecord#find

Model.all(:select => 'COUNT(*) AS count, name, date, location, status', :group => 'name')

或者,如果使用 Rails 3

Model.all.select('COUNT(*) AS count, name, date, location, status').group('name')

如果您始终打算根据此关系对数据进行分组,请考虑将其添加为模型的默认范围。

class Model < ActiveRecord::Base
  default_scope select('COUNT(*) AS count, name, date, location, status')
  default_scope group('name')
end

Sometimes the best way to do this is tricky based upon the format and properties of your data. But in general, you can use the :group argument of ActiveRecord#find.

Model.all(:select => 'COUNT(*) AS count, name, date, location, status', :group => 'name')

Or if using Rails 3

Model.all.select('COUNT(*) AS count, name, date, location, status').group('name')

If you always intend to group the data based on this relationship, consider adding it as a default scope to your model.

class Model < ActiveRecord::Base
  default_scope select('COUNT(*) AS count, name, date, location, status')
  default_scope group('name')
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文