многоколоночная группировка и суммирование в рельсах - PullRequest
0 голосов
/ 07 марта 2011

мои данные выглядят так

 ___________________________________
|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.....

1 Ответ

2 голосов
/ 07 марта 2011

Иногда лучший способ сделать это хитро, основываясь на формате и свойствах ваших данных. Но в целом вы можете использовать :group аргумент 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...