Должен появляться в предложении Group By или использоваться в agg. функция - PullRequest
0 голосов
/ 05 ноября 2018

У меня большая таблица пользователей, и я пытаюсь сгруппировать всех пользователей в городе по улицам и получить счет через 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']}

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете сгруппировать его, используя 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']] }

Я искал способ сделать это простым запросом, но вам потребуется несколько обращений к БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...