2016-12-01 88 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,以便從上面的3個表中獲得預期的輸出結果。 我在想什麼做的是,在我的查詢我會:

  1. 使用LEFT OUTER JOIN使用ID
  2. 找到「總計」之和「分數」爲每個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中每個id有一行,你可以做

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