按求和和和联接分组,给出重复的行

mxg2im7a  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(357)

我有一个表,其中有materialno、billedqty、materialdesc、startdate列。我需要找到每个物料编号的开票数量之和。这给我重复的值(我需要不同的物料编号和帐单数量的总和)。这是我使用group by和join编写的查询。我想按materialno分组,只是因为通过其他列我得到了错误的sum值。

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
vlf7wbxs

vlf7wbxs1#

由于join,您得到了重复的结果,您可以在没有join的情况下获得预期的结果。尝试下面的查询

select materialno, sum(billedqty), min(materialdesc), min(startdate) from billing group by materialno;

当您将test1与billing table连接在一起时,会得到重复的结果,因为materialno=“1001”有两个对应的“materialdesc”值和“startdate”值。但是我提到的查询只返回第一个“materialdesc”和“materialno”的“startdate”。

相关问题