Необходимое руководство: Backend SQL logi c for Dynami c выбор поля пользователями во внешнем интерфейсе - PullRequest
0 голосов
/ 07 мая 2020

У меня есть следующий набор данных:

Country,Commodity,Year,Type,Amount
US,Vegetable,2010,Harvested,2.44
US,Vegetable,2010,Yield,15.8
US,Vegetable,2010,Production,6.48
US,Vegetable,2011,Harvested,6
US,Vegetable,2011,Yield,18
US,Vegetable,2011,Production,3
Argentina,Vegetable,2010,Harvested,15.2
Argentina,Vegetable,2010,Yield,40.5
Argentina,Vegetable,2010,Production,2.66
Argentina,Vegetable,2011,Harvested,15.2
Argentina,Vegetable,2011,Yield,40.5
Argentina,Vegetable,2011,Production,2.66
Bhutan,Vegetable,2010,Harvested,7
Bhutan,Vegetable,2010,Yield,35
Bhutan,Vegetable,2010,Production,5
Bhutan,Vegetable,2011,Harvested,2
Bhutan,Vegetable,2011,Yield,6
Bhutan,Vegetable,2011,Production,3

Дано:

  1. Если в какой-либо одной стране в данных указано n лет, все в других странах также должно быть такое же число n лет. Например: если в США есть данные за 2011 и 2012 годы, то для всех остальных стран будут данные за 2011 и 2012 годы.

Условия:

  1. Агрегация происходит только при выборе нескольких стран. Группировка будет по товарам и годам.

Например: если пользователь во внешнем интерфейсе выбирает США и Аргентину, мы должны показать -

Сумма полученной доходности = (Урожай в США + Урожай в Аргентине) / (Производство в США + Производство в Аргентине) , т.е. (2,44 + 15,2) / (6,48 + 2,66), аналогично для трех стран это будет добавление трех значений урожая делится добавлением трех производственных значений и так далее. Это должно быть заполнено в новой строке.

Примечание : пользователи во внешнем интерфейсе могут выбрать любую комбинацию стран. Единственная цель сделать это в бэкэнде, а не динамически делать это во фронтенде, заключается в том, что AWS QuickSight (наш инструмент визуализации), хотя и может заполнять сумму в выбранных фильтрах столбца, но еще не поддерживает вычисление по этим производным суммированным полям. . Следовательно, все расчеты для всех комбинаций стран должны быть предварительно заполнены (очень наивный подход), чтобы сделать их доступными в отчете.

Два моих вопроса ко всем SQL экспертам:

  • Как я могу заполнить строки всех комбинаций стран, сгруппированных по годам и товарам, чтобы в них были данные для всех возможных комбинаций.
  • Учитывая, что я могу заполнить все комбинации строк, как будет ли инструмент отчетности понимать, какую производную строку выбрать в зависимости от выбора стран, поскольку эта строка помечена как США + Аргентина, эта строка - США + Бутан и т. д. c.

Приветствуются любые решения.

SQL Предпочтительный инструмент: Spark SQL или Athena SQL (работает на Presto) или HiveQL. Менее предпочтительны: Oracle, PG SQL

Примечание 2 : единственная цель публикации этого вопроса, хотя я сформулировал то же самое в другом вопросе, заключается в том, что я не Я не хочу навязывать свой наивный подход кому-то, кто пытается решить проблему, поэтому здесь я определил проблему с большей ясностью, чем просьба о помощи в решении. А в другом вопросе я изложил свой подход к ожидаемому результату. Если вы хотите увидеть другой вопрос, здесь .

1 Ответ

0 голосов
/ 07 мая 2020

вы можете начать с чего-то вроде этого:

select * from
(
    select c.Country, y.Year
    from
    (select distinct Country from table) as c,
    (select distinct Year from table) as y
) as cy
left join table as t on t.Country = cy.Country and t.Year = cy.Year

это даст вам все строки со всеми комбинациями страны / года и, возможно, данных из основной таблицы, поэтому теперь вы можете добавить фильтр / группировку

...