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:如何使用多列分区计算百分比增加的主要内容,如果未能解决你的问题,请参考以下文章