SQL:如何使用多列分区计算百分比增加

Posted

技术标签:

【中文标题】SQL:如何使用多列分区计算百分比增加【英文标题】:SQL: How to calculate percentage increase using partition by with multiple columns 【发布时间】: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 等..... . 【参考方案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 在一个新问题中所说的那样

以上是关于SQL:如何使用多列分区计算百分比增加的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 计算多列值之间的重叠百分比

SQL |如何对 3 个项目的分区组求和?

如何使用 SQL 语句计算百分比

使用 T-SQL 如何计算考试成绩百分比?

从多列值计算百分比

如何对sql查询引用组中的多列求和