Объединить 2 счета в сумму в улье sql из таблицы союзов - PullRequest
0 голосов
/ 13 сентября 2018

Мне трудно объединить сумму подсчетов в результате объединения таблицы в кусте sql

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

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

После справки из предыдущего ответа

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 голосов
/ 13 сентября 2018

Это то, что вам нужно

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

0 голосов
/ 13 сентября 2018

Попробуйте это как:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...