ActiveRecord запрос для получения частоты в зависимости от условия - PullRequest
0 голосов
/ 07 июня 2019

Пожалуйста, прочитайте все

Здравствуйте, мне нужно сделать несколько более или менее сложных вычислений (по крайней мере, для меня), я сделал запрос с несколькими объединениями, чтобы объединить несколько таблиц и выбрать несколько столбцов, но теперь я должен вычислить частоту поле, это поле deliver.status_id, проблема в том, что я должен сделать этот расчет с учетом только одного deliver_group.id, что я имею в виду под этим? давайте сделаем пример:

Если у меня есть эти выбранные столбцы ...

|---------------------|------------------|
|  deliver.status_id  | deliver_group.id |
|---------------------|------------------|
|          1          |         10       |
|---------------------|------------------|
|          3          |         11       |
|---------------------|------------------|
|          4          |         12       |
|---------------------|------------------|
|          2          |         12       |
|---------------------|------------------|
|          1          |         12       |
|---------------------|------------------|
|          2          |         13       |
|---------------------|------------------|
|          3          |         13       |
|---------------------|------------------|

Тогда частота deliver.status_id будет {1 => 2, 2 => 2, 3 => 2 4 => 1}, но, как я сказал, мне нужно учитывать только одно появление deliver_group.id, это означает, что частота будет {1 => 1, 2 => 1, 3 => 1, 4 => 1}, потому что я должен "игнорировать" «deliver.status_id когда deliver_group.id повторяется.

|---------------------|------------------|
|  deliver.status_id  | deliver_group.id |
|---------------------|------------------|
|          1          |         10       |
|---------------------|------------------|
|          3          |         11       |
|---------------------|------------------|
|          4          |         12       |
|---------------------|------------------|
|          2          |   12 (ignored)   |
|---------------------|------------------|
|          1          |   12 (ignored)   |
|---------------------|------------------|
|          2          |         13       |
|---------------------|------------------|
|          3          |   13 (ignored)   |
|---------------------|------------------|

Другой пример:

|---------------------|------------------|
|  deliver.status_id  | deliver_group.id |
|---------------------|------------------|
|          1          |         7        |
|---------------------|------------------|
|          3          |         8        |
|---------------------|------------------|
|          4          |         9        |
|---------------------|------------------|
|          2          |    9 (ignored)   |
|---------------------|------------------|
|          1          |         10       |
|---------------------|------------------|
|          2          |         11       |
|---------------------|------------------|
|          3          |   11 (ignored)   |
|---------------------|------------------|
|          3          |   11 (ignored)   |
|---------------------|------------------|
|          3          |         12       |
|---------------------|------------------|
|          3          |   12 (ignored)   |
|---------------------|------------------|
|          3          |   12 (ignored)   |
|---------------------|------------------|

Результатом будет {1 => 2, 2 => 1, 3 => 2, 4 => 1}.

Кстати, я не хочу делать это с синтаксисом ruby, я имею в виду, я знаю, как сделать это с Hash и итератором, бла, бла, бла, но я хочу сделать вычисления полностью с помощью запроса, потому что производительность является ключевым фактором в этом приложении

Я знаю, что случай, когда ничего не игнорируется, довольно прост, query.group('deliver.status_id').count, но я заблудился с моим настоящим делом.

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