【问题标题】:SQL: How to calculate percentage increase using partition by with multiple columnsSQL:如何使用多列分区计算百分比增加
【发布时间】:2021-04-17 12:56:11
【问题描述】:

我有 6 列命名为 TOTAL_STOCK_VALUE,VALUE_UNRESTRICTED,fiscal_year,fiscal_period,plant,storage_location。我想从 TOTAL_STOCK_VALUE,VALUE_UNRESTRICTED 列中创建一个百分比增加值的新列。

Sample data : 
TOTAL_STOCK_VALUE  VALUE_UNRESTRICTED  fiscal_year  fiscal_period  plant  storage_location
336.0                228.0                 2019         10          ABC         AR40
418.0                209.0                 2019         10          ABC         IN80
162.0                0.000                 2020         04          CTF         KK29
86412.0              53060.0               2020         04          ARZ         HD91
Desired Output :
TOTAL_STOCK_VALUE  VALUE_UNRESTRICTED  fiscal_year  fiscal_period  plant  storage_location  New
336.0                228.0                 2019         10          ABC         AR40       32.14%
418.0                209.0                 2019         10          ABC         IN80        50%
162.0                0.000                 2020         04          CTF         KK29        100%
86412.0              53060.0               2020         04          ARZ         HD91       38.59%  

使用过的查询:

select
    TOTAL_STOCK_VALUE,
    VALUE_UNRESTRICTED,
    fiscal_year,
    fiscal_period,
    plant,
    storage_location,
    ((TOTAL_STOCK_VALUE - VALUE_UNRESTRICTED) / TOTAL_STOCK_VALUE) * 100 over(partition by fiscal_year,fiscal_period,plant,storage_location) as New
from
    MyTable

上面的查询没有给出期望的结果并引发错误。 任何帮助将不胜感激。

【问题讨论】:

  • 你得到了什么结果?
  • 我在你的 sql 中没有看到任何聚合函数或 order by。可以添加试试吗?
  • @KoushikRoy 不,我只想执行那个简单的数学运算,但是重要的是,我希望数据被问题中 partition by 子句中提到的那些列分隔。
  • @GordonLinoff 我收到一条错误消息:ParseException:遇到:超出预期:AND、AS、ASC、BETWEEN、BLOCK_SIZE、COMMENT、COMPRESSION、CROSS、DEFAULT、DESC 等..... .

标签: sql hive cloudera impala hue


【解决方案1】:

根据您想要的输出,您似乎只想这样做:

select
    TOTAL_STOCK_VALUE,
    VALUE_UNRESTRICTED,
    fiscal_year,
    fiscal_period,
    plant,
    storage_location,
    (1 - (VALUE_UNRESTRICTED / TOTAL_STOCK_VALUE)) * 100.0 as New
from
    MyTable

【讨论】:

  • 感谢您的回复。这给出了百分比输出,但是表中有大量数据,重要的是,我想根据我使用的查询中提到的列对数据进行分区。
  • @FarhanPanja 这正在产生您向我们展示的所需输出!拥有庞大的数据与背后的逻辑无关
  • @FarhanPanja 。 . .不需要窗口函数。我认为这回答了您在这里提出的问题。如果您有其他问题,请提出问题。
  • @eshirvana 此处无法按输出显示分区。此外,我想使用 tableau 中的输出,该输出需要按年、会计期间等对数据进行分组或分区,因为这些输出对于基于工厂和 storage_location 的不同百分比值具有相同的值。有没有办法做到这一点或不可能?谢谢
  • @FarhanPanja 再次,不清楚你想说什么,用示例数据和所需的输出解释它,正如 Gordon 在一个新问题中所说的那样
猜你喜欢
  • 2010-10-13
  • 2021-11-01
  • 2021-06-30
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
相关资源
最近更新 更多