Есть ли способ агрегировать данные перед отправкой обратно пользователю? - PullRequest
0 голосов
/ 28 апреля 2020

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

Например:

"select * from person p where p.age < 40 and p.income > 30000"

и поставщик услуг вернет:

ages 20...30          | ages 30...40
there are 454 persons | there are 23 persons

вместо 477 (454 + 23) разных строк.

Я сталкивался с секретным обменом Шамира и алгоритмом разгона информации Рабина, но не конечно, если эти вещи - путь к go.

Это не должно быть на уровне базы данных. Это может быть какой-то алгоритм, который агрегирует данные перед отправкой обратно пользователю.

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 29 апреля 2020

Вы не можете волшебным образом знать, как группировать данные. Но вы можете запросить группировку следующим образом:

SELECT
    CASE -- I will include more buckets because it is easy.
        WHEN p.age < 10 THEN '0..10'
        WHEN p.age < 20 THEN '10..20'
        WHEN p.age < 30 THEN '20..30'
        WHEN p.age < 40 THEN '30..40'
        WHEN p.age < 50 THEN '40..50'
        WHEN p.age < 60 THEN '50..60'
        WHEN p.age < 70 THEN '60..70'
        WHEN p.age < 80 THEN '70..80'
        WHEN p.age < 90 THEN '80..90'
        ELSE '90+'
    END AS age_bucket
  , COUNT(*) AS people
FROM person p
WHERE p.age < 40 and p.income > 30000
GROUP BY 1;

Вы можете переместить группы в свою собственную таблицу и создать объединение вместо оператора case. У вас может быть несколько групп категорий, которые вы объединяете для нарезки и нарезания данных несколькими способами.

Инструмент работает хорошо. Но вы должны сказать это именно то, что вы хотите.

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