我有一个很大的用户表,我试图按街道将一个镇内的所有用户分组,并通过postgres和rails进行计数。以下内容为我提供了正确的数据,但是我想知道是否可以获得更好的输出:
User.group(:town,:street).count ###Gives a large hash of key/value pairs with town_name repeated each time for every grouped street like {['TOWN_NAME', 'STREET_NAME']=>'#ofUsers'}
所以代替这个:{['BETHPAGE', 'JACKSON AVE']=>372, ['BETHPAGE', 'WILLIAM ST']=>28}
我想要{ 'BETHPAGE'=>{['JACKSON', 372],['WILLIAM ST', 28]} }
是否有一个更好的查询,该查询将以TOWN_NAME一次用作键的格式输出此信息,并且每条街道及其计数均以数组形式给出:
{ 'TOWN_NAME' => {['STREET_NAME', '#ofUsers'], ['STREET_NAME', '#ofUsers']}
答案 0 :(得分:0)
您可以使用ruby将其分组
original = User.group(:town, :street).count
grouped = original.group_by { |vals, count| vals[0] }
grouped.each do |town, matches|
grouped[town] = matches.map { |vals, count| [vals.second, count] }
end
grouped # => { 'TOWN_NAME' => [['STREET_NAME', '#ofUsers'], ['STREET_NAME', '#ofUsers']] }
我一直在寻找一种在普通查询中执行此操作的方法,但是您需要多次调用数据库。