Группировка по значениям столбцов массива в Rails-5 - PullRequest
0 голосов
/ 24 июня 2019

У меня интересная проблема

Я хочу посчитать по отдельным значениям в столбце массива таблицы

например,

для модели User

id |  community_ids
1  |  {2, 4}
2  |  {2, 5} 
3  |  {2, 4}

Я хочу сказать

Community| User count
  2      | 3
  4      | 2
  5      | 1

У меня есть решение

User.
  pluck(Arel.sql('unnest(community_ids) as community_id')).
  group_by(&:itself).
  transform_values(&:count)

Но проблема в том, что я перебираю всех пользователей

Спасибо

1 Ответ

0 голосов
/ 24 июня 2019

Версия SQL может выглядеть примерно так:

SELECT unnest(community_ids) AS community_id, count(*) AS count
FROM users 
GROUP BY community_id;

Сопоставление с рельсами. AR также тихо и прямолинейно, это может быть сделано разными способами, я сделаю самый простой дамп:

sql = "SELECT unnest(community_ids) AS community_id, count(*) AS count
FROM users 
GROUP BY community_id"
results = ActiveRecord::Base.connection.execute(sql).to_a
# results should look something like: [{"community_id"=>2,"count"=>3}...]

PS: этот подход взят из здесь .

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