计算蜂巢中的百分比

时间:2014-05-28 19:04:08

标签: hadoop percentage hiveql

我在获得百分比方面遇到了一些麻烦。

colA | cloB | colC
4    |  a   |  y
5    |  b   |  y
7    |  a   |  n
8    |  a   |  y
------------------
Output:
a 67%
b 100%

我必须得到colB中每个字母的colC百分比(所有' y')。

我已经能够得到两个总数,但似乎无法让百分比发挥作用。
得到总数' y' a,b(colB);

SELECT colB, COUNT(*) FROM tbl WHERE colC = '"y"' GROUP BY colB;
Output:
a   2
b   1

获取colB的总计总计

SELECT COUNT(colC) FROM tbl WHERE colC = '"y"';
Output:
4

提前致谢

2 个答案:

答案 0 :(得分:6)

使用IF UDF来避免加入

SELECT t1.colB,
   SUM( IF( colC == 'y', 1 , 0 ) )/ COUNT(*) * 100 as pct
FROM tbl t1
GROUP BY t1.colB;

答案 1 :(得分:0)

我不是(但是:D)是Hive的专家,但你可以尝试这样的子查询:

SELECT 
    t1.colB,
    100*(count(colB)/sub.cnt)
FROM 
    tbl t1,
    (SELECT COUNT(colC) as cnt 
     FROM tbl 
     WHERE colC = 'y') sub
JOIN 
    tbl ON (sub.colC = tbl.colC))
GROUP BY 
    colB;

Ps:我不是100%肯定,我实际上无法测试它,只是想提供帮助。