【发布时间】:2020-05-07 18:37:52
【问题描述】:
我有一个数据集如下:
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
鉴于:
- 如果任何一个国家的数据中有 n 年,所有其他国家也应该有相同的 n 年。例如:如果美国有 2011 年和 2012 年的数据,那么所有其他国家/地区都会有 2011 年和 2012 年的数据。
条件:
- 聚合仅发生在多国选择时。分组将按商品和年份。
例如:如果前端工具中的用户选择美国和阿根廷,我们必须显示 -
派生产量 =(美国收获 + 阿根廷收获)/(美国产量 + 阿根廷产量),即 (2.44+15.2)/(6.48+2.66),同样,对于三个国家,这将是三个收获值的增加除以三个产值的增加,依此类推。必须在新行中填充。
注意:前端用户可以选择任意国家组合。在后端而不是在前端动态地执行它的唯一目的是因为 AWS QuickSight(我们的可视化工具),即使可以在选定的列过滤器上填充总和,但还不支持对那些派生的总和字段进行计算。因此,必须预先填充所有国家/地区组合的整个计算(非常幼稚的方法),以使其在报告中可用。
我对所有 SQL 专家的两个问题是:
- 如何填充按年份和商品分组的所有国家组合的行,以便它包含所有可能组合的数据。
- 鉴于我可以填充所有行组合,报告工具将如何了解根据用户选择的国家/地区选择哪个派生行,因为该行标记为 US+Argentina,该行为 US+Bhutan,等
非常欢迎任何解决方案。
首选 SQL 工具:Spark SQL 或 Athena SQL(在 Presto 上运行)或 HiveQL。 不太喜欢:Oracle、PGSQL
注意 2:发布此问题的唯一目的是,尽管我在另一个问题中已经详细阐述了相同的问题,但因为我不想将我的幼稚方法强加给试图解决问题的人问题,所以在这里,我已经比在解决方案中寻求帮助更清楚地定义了问题。而在另一个问题中,我已经给出了预期结果的方法。如果您想查看其他问题,请here it is。
【问题讨论】:
标签: sql oracle scala apache-spark-sql amazon-athena