【问题标题】:How to calculate the dirrerence between two columns如何计算两列之间的差异
【发布时间】:2021-10-23 05:05:11
【问题描述】:

我有一个包含两个月数据的表格

编写查询以查找从 10 月到 11 月因购买而产生的收入变化。

使用数据作为((选择月份(事件时间)作为月份值,总和(价格)作为零售最终的八进制,其中事件类型='购买'和月份(事件时间)= 10 按月分组(事件时间))联合(选择月份(事件时间) ) as month_value, sum(price) as novrevenue from retailfinal where event_type = 'purchase' and month(event_time) = 11 group by month(event_time))) select *,(novrevenue-octrevenue) as diff from data ;

上面的查询有什么问题?

【问题讨论】:

    标签: hive


    【解决方案1】:

    Sql 问题很少。

    1. 您正在合并 sep 和 oct 值,然后将它们相减。这是不可能的。您需要在同一行中计算它们。

    2. 没有年份的月份毫无价值,并且可能会为您提供多年数据的错误结果。所以 sum 应该按年份分组。

    3. conditik 应该在 initcapped event_type =Purchase 上。否则它将永远找不到匹配项。

    现在,您的问题的解决方案如下。这会给你带来一年的差异。根据您的要求,您可以将列添加到分组依据。如果您想要所有列,则需要将以下查询与零售表连接。

    Select yr, octsum-septsum as diff
    From
    (Select
    Sum(case when lower(sep.event_type) = 'purchase' and 
    month(event_time)=10 then price else 0 end ) octsum,
    Sum(case when lower(sep.event_type) = 'purchase' and 
    month(event_time)=9 then price else 0 end ) septsum,
    Year(event_time) yr
    From 
    retailfinal 
    Group by Year(event_time) 
    )Rs
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2010-10-29
      • 1970-01-01
      • 2022-08-21
      相关资源
      最近更新 更多