基于一列的唯一值与SQL中的其他列相加

时间:2017-08-30 18:35:03

标签: hive hbase hiveql

我在SQL表下面有名称TEST_T

SKU_ID      DC_ID         CRT_DTTM                  FIELD_NAME    TOTAL 
------------------------------------------------------------------------
sku1        dc1     2017-08-02 02:28:41.711         FIELD1        5
sku1        dc1     2017-08-01 01:28:41.711         FIELD1        4             
sku2        dc1     2017-08-02 03:12:10.064         FIELD1        6
sku2        dc1     2017-08-01 04:12:10.064         FIELD1        1        
sku3        dc2     2017-08-02 07:32:46.795         FIELD1        3            
sku4        dc2     2017-08-02 10:44:09.347         FIELD1        2

并且有很多具有不同DC_ID的记录,上面仅仅是例如。 我有一个以下工作查询,它​​将所有DC_ID为dc1的记录的总和加起来

select A.DC_ID , sum(TO_NUMBER(A.TOTAL)) as SUM FROM (
Select A.DC_ID, A.SKU_ID, A.CRT_DTTM, A.FIELD_NAME, A.TOTAL
FROM TEST_T A
INNER JOIN (
Select DC_ID, FIELD_NAME, Max(CRT_DTTM) as LatestDate, SKU_ID  from TEST_T
Where DC_ID = 'dc1'
AND FIELD_NAME = 'FIELD1'
Group By DC_ID, FIELD_NAME, SKU_ID
) B
on A.CRT_DTTM = B.LatestDate 
and A.SKU_ID = B.SKU_ID
and A.DC_ID = B.DC_ID
and A.FIELD_NAME = B.FIELD_NAME)
Group By A.DC_ID;

将结果显示为

A.DC_ID     SUM 
---------------
dc1         11

如何以通用方式修改上述查询以处理很多DC_ID,这样我将得到如下结果

A.DC_ID     SUM 
---------------
dc1         11
dc2         5
dc3         7
dc4         9
dc5         18
etc.....

2 个答案:

答案 0 :(得分:3)

您的输出可以通过以下查询来实现。你还没有解释为什么你创建了内部子查询和加入。如果您解释该查询可能不同

select dc_id, sum(Total) as_sum  from test_t Group by DC_ID

您也可以尝试以下查询。我还没有对结果进行测试,但它可以让您了解rank

的用法
    select dc_id,sum(_sum) _sum from
    (
    select sum(total) over partition by(Dc_ID) as _sum,
    rank() over partition by(Dc_ID,skuid order by CRT_DTTM desc) as rno,
    dc_ID
    ) t
    where rno=1
Group by DC_ID

早期的问题是sql-server的标签,所以答案是根据没有它可以帮助其他人使用sql server

答案 1 :(得分:0)

为什么使用复杂查询需要一个简单的查询,例如下面的代码

select DC_ID , sum(TOTAL) as [SUM] FROM TEST_T group by DC_ID

现在,如果您需要某个字段的位置,可以使用下面的代码

select DC_ID , sum(TOTAL) as [SUM] FROM TEST_T where FIELD_NAME = 'FIELD1' group by DC_ID

如果您需要更多帮助,请告诉我......