将2个计数组合成联合表中的hive sql中的总和

问题描述 投票:1回答:3

作为hive sql中的union表的结果,我很难将计数总和组合在一起

SELECT pulocation AS locID,count(pulocation) AS puCount FROM task1 
  WHERE  distance > 0.5 AND distance < 1  
  GROUP BY pulocation 
UNION
SELECT dolocation,count(dolocation) AS doCount FROM task1 
  WHERE  distance > 0.5 AND distance < 1
  GROUP BY dolocation

会给我这张桌子的结果

_u2.locid   _u2.pucount
1           18
1           24  
3           3
3           4
4           4693

我试图把这个表创建一个新的表,结合计数但没有成功。

SELECT _u2.locid, SUM(_u2.pucount)
FROM (
SELECT pulocation AS locID,count(pulocation) AS puCount FROM task1 
  WHERE  distance > 0.5 AND distance < 1  
  GROUP BY pulocation 
UNION
SELECT dolocation,count(dolocation) AS doCount FROM task1 
  WHERE  distance > 0.5 AND distance < 1
  GROUP BY dolocation)
GROUP BY u2.locid

我尝试使用'_u2'。或'u2。'但导致此错误

org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: ParseException line 14:0 Failed to recognize predicate 'GROUP'. Failed rule: 'identifier' in subquery source

我基本上想要的是这张桌子

_u2.locid   _u2.pucount
1           42
3           7       
4           4693
hive hiveql
3个回答
0
投票

试试这个:

SELECT t.locid, SUM(t.pucount)
FROM ((SELECT pulocation AS locID, count(pulocation) AS puCount
       FROM task1 
       WHERE  distance > 0.5 AND distance < 1  
       GROUP BY pulocation
      )
      UNION ALL
      (SELECT dolocation, count(dolocation) AS doCount
       FROM task1 
       WHERE  distance > 0.5 AND distance < 1
       GROUP BY dolocation
      )
     ) t
GROUP BY t.locid

0
投票

在上一个答案的帮助下,

SELECT t.locid, SUM(t.pucount) AS count
FROM (
  SELECT pulocation AS locID,COUNT(pulocation) as pucount
  FROM task1 
    WHERE  distance > 0.5 AND distance < 1  
    GROUP BY pulocation 
  UNION
  SELECT dolocation,count(dolocation) as doCount
  FROM task1 
    WHERE  distance > 0.5 AND distance < 1
    GROUP BY dolocation) AS t
GROUP BY t.locid 
ORDER BY count DESC
LIMIT 10

0
投票

这就是你需要的

SELECT locID, sum(totCount) as totCount FROM ( SELECT pulocation AS locID,count(pulocation) AS totCount FROM task1 WHERE distance > 0.5 AND distance < 1 GROUP BY pulocation UNION ALL SELECT dolocation AS locID,count(dolocation) AS totCount FROM task1 WHERE distance > 0.5 AND distance < 1 GROUP BY dolocation ) t1 GROUP BY locID

© www.soinside.com 2019 - 2024. All rights reserved.