按sum和join分组给出重复的行

时间:2017-06-25 13:54:07

标签: hive

我有一张表格,其中包含materialno,billedqty,materialdesc,startdate列。 我需要为每个材料找到billedqty的总和。这给了我重复的值(我需要不同的materialno和billedqty的总和)。这是我使用group by和join编写的查询。我想仅通过materialno进行分组,因为在其他列中我得到了错误的总和值。

create table test1(
materialno string,
BilledQtysum Double)
stored as ORCFILE;

insert into table test1
select materialno,sum(BilledQty) from billing group by materialno;

select s1.MaterialNo,s1.Material_Description,s1.BilledQty,s2.BilledQtysum,s1.Start_Date
 from test1 s2 join billing s1 on s2.materialno=s1.materialno;
Billing Table:
 materailno billedqty materaildesc startdate
 1001      |    22   |  materail1 |2017-05-23
 1002      |    25   |  materail2 |2012-04-29
 1003      |    30   | materail2  |2013-02-03
 1001      |    22   | materail2  |2013-02-03

 Expected Result:
   materailno billedqty materaildesc startdate
 1001      |    44   |  materail1 |2017-05-23
 1002      |    25   |  materail2 |2012-04-29
 1003      |    30   | materail2  |2013-02-03

   my result:
 materailno billedqty materaildesc startdate
 1001      |    44   |  materail1 |2017-05-23
 1002      |    25   |  materail2 |2012-04-29
 1003      |    30   | materail2  |2013-02-03
 1001      |    44   | materail2  |2013-02-03

1 个答案:

答案 0 :(得分:0)

由于加入,您将获得重复项,无需加入即可获得预期结果。请尝试以下查询

getUser()
{
  const headers: Headers = new Headers();
  headers.append('Accept', 'application/json');
  headers.append('Content-Type', 'application/json');

  //Collect token value
  this.authService.getToken().then(function(resp){
      headers.append('X-Auth-Token', resp);
  });

  const options = new RequestOptions({headers: headers});

  return this.http.get('http://localhost:9900/user',options).map(response => response.json());
}

当您使用结算表加入 test1 时,您将获得重复项,因为您的materialno =“1001”有2个相应的“ materialdesc “值和” startdate “值。但我提到的查询只返回“ materialdesc ”和“ materialno ”的“ startdate ”。