Пожалуйста, прочитайте все
Здравствуйте, мне нужно сделать несколько более или менее сложных вычислений (по крайней мере, для меня), я сделал запрос с несколькими объединениями, чтобы объединить несколько таблиц и выбрать несколько столбцов, но теперь я должен вычислить частоту поле, это поле 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
, но я заблудился с моим настоящим делом.