【问题标题】:how to calculate cumulative salary in hive如何计算蜂巢中的累积工资
【发布时间】:2014-11-23 02:19:07
【问题描述】:

由于 hive 仅支持子查询中的子查询,例如 select *from (subquery) 并且也仅支持 equjoin 所以我们如何从像这样的表中计算累积工资 表员工的记录如下。

身份证姓名工资 e001 曼尼什 10000 e002 40000 e003 桑托什 45000 e004 罗希特 30000

所以输出应该如下所示

身份证 姓名 工资 cumsalary e001 曼尼什 10000 10000 e002 40000 50000 e003 桑托什 45000 95000 e004 罗希特 30000 125000

如何在 hive 中实现这一点

【问题讨论】:

    标签: mysql sql hadoop hive


    【解决方案1】:

    Hive 支持sum() 解析功能,所以你应该可以做到以下几点:

    select t1.* ,
    sum(salary) over (order by id) cumsalary
    from table t1
    

    有关 Hive 分析函数的更多信息,请参阅https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics

    【讨论】:

      【解决方案2】:

      使用Correlated Sub-Query求累计和

       create table #temp(id varchar(10),    name  varchar(50),     salary int)
       insert #temp values 
      ('e001',  'manish',      10000),
      ('e002',  'amit   ',      40000),
      ('e003',  'santosh ',    45000),
      ('e004',  'rohit  ',     30000)
      
      SELECT *,
             (SELECT Sum(salary)
              FROM   #temp t2
              WHERE  t2.id <= t.id) As cumsalary
      FROM   #temp t 
      

      【讨论】:

        猜你喜欢
        • 2014-07-26
        • 1970-01-01
        • 1970-01-01
        • 2020-09-27
        • 2021-05-11
        • 2020-05-11
        • 2021-02-02
        • 2019-06-06
        • 1970-01-01
        相关资源
        最近更新 更多