2016-12-01 9 views
0

У меня есть несколько таблиц, как:Выяснить процентное значение с помощью улей

Table_1: 
+------------+--------------+ 
| Student_ID | Student_Name | 
+------------+--------------+ 
|  000 | Jack   | 
|  001 | Ron   | 
|  002 | Nick   | 
+------------+--------------+ 

Table_2: 
+-----+-------+-------+ 
| ID | Total | Score | 
+-----+-------+-------+ 
| 000 | 100 | 80 | 
| 001 | 100 | 80 | 
| 002 | 100 | 80 | 
+-----+-------+-------+ 

Table_3: 
+-----+-------+-------+ 
| ID | Total | Score | 
+-----+-------+-------+ 
| 000 | 100 | 60 | 
| 001 | 100 | 80 | 
| 002 | 100 | 70 | 
+-----+-------+-------+ 

Expected_Output:

ID percent 
000 70 
001 80 
002 75 

Я создал таблицу улья раньше. Теперь я хочу придумать один HiveQL, чтобы получить ожидаемый результат из этих трех таблиц. То, что я имею в виду, чтобы сделать это, на мой запрос я буду:

  1. использовать левое внешнее соединение, используя ID
  2. найти сумму «Total» и «оценка» для каждого ID
  3. делят сумму «Оценка» по сумме «Всего», чтобы получить процент.

Я пришел с этим:

INSERT OVERWRITE TABLE expected_output 
SELECT t1.Student_ID AS ID, (100*t4.SUM1/t4.SUM2) AS percent 
FROM Table_1 t1 
LEFT OUTER JOIN(
SELECT (ISNULL(Total,0) + ISNULL(Total,0)) AS ‘SUM2’, (ISNULL(Score,0) + ISNULL(Score,0)) AS ‘SUM1’ 
FROM t4 
)ON (t1.Student_ID=t2.ID) JOIN Table_3 t3 ON (t3.ID=t2.ID); 

И, я застрял в этой точке. Не знаете, как достичь результата. Любая идея, пожалуйста?

ответ

0

Это простой join. Предполагая, что у вас есть один ряд на один идентификатор в каждой таблице t2 и t3, вы можете сделать

SELECT t2.Student_ID AS ID, 100.0*(t2.score+t3.score)/(t2.total+t3.total) AS percent 
FROM Table_2 t2 
JOIN Table_3 t3 ON t3.ID=t2.ID 
+0

Спасибо! Если у меня есть нулевое значение в любом столбце, могу ли я заменить его на 0 в этом методе? – Tanvir

+0

уверен, что вы можете использовать 'isnull', как вы это делали в своем запросе. –

+0

Большое спасибо! – Tanvir