【问题标题】:Guidance needed: Backend SQL logic for dynamic selection of a field by users in frontend需要指导:前端用户动态选择字段的后端 SQL 逻辑
【发布时间】: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

鉴于:

  1. 如果任何一个国家的数据中有 n 年,所有其他国家也应该有相同的 n 年。例如:如果美国有 2011 年和 2012 年的数据,那么所有其他国家/地区都会有 2011 年和 2012 年的数据。

条件:

  1. 聚合仅发生在多国选择时。分组将按商品和年份。

例如:如果前端工具中的用户选择美国和阿根廷,我们必须显示 -

派生产量 =(美国收获 + 阿根廷收获)/(美国产量 + 阿根廷产量),即 (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


    【解决方案1】:

    你可以这样开始:

    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
    

    这将为您提供包含国家/地区的所有组合的所有行以及主表中的可选数据,因此您现在可以添加过滤器/分组

    【讨论】:

    • 我不想查看年份的组合,对于任何国家/地区组合,相应的金额应按商品和年份汇总。
    • 突出显示问题中的公式。
    • @AakashBasu 您的第一个问题是How can I populate the rows of all combination of countries grouped by year - 我向您展示了如何做到这一点,基于此您可以扩展/添加更多分组/公式
    • 我想我必须跑一下看看结果,我会告诉你结果。如果您愿意,您还可以浏览此问题底部的链接问题,以深入了解需求。
    猜你喜欢
    • 2021-03-28
    • 2018-10-10
    • 2015-01-23
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多