从表格生成计数后需要在Hive中生成百分比列

问题描述

我创建了以下HIVE表,该表有助于从源配置单元表中确定个人的数量和类型。现在,我需要从中创建更多的百分比突破:

CREATE TABLE hh_member_type AS 
SELECT count(*) AS count,CASE WHEN (LEAD_HOUSEHLD_STATUS = 'D') THEN 'Deceased' 
     WHEN (LEAD_HOUSEHLD_STATUS = 'H') THEN 'Head' 
     WHEN (LEAD_HOUSEHLD_STATUS = 'P') THEN 'Aged Parent At Home' 
     WHEN (LEAD_HOUSEHLD_STATUS = 'U') THEN 'UnkNown' 
     WHEN (LEAD_HOUSEHLD_STATUS = 'W') THEN 'Spouse' 
     WHEN (LEAD_HOUSEHLD_STATUS = 'Y') THEN 'Young Adult' ELSE 'NULL' 
 END AS HH_STATUS 
FROM ( 
SELECT  LEAD_HOUSEHLD_STATUS FROM customer 
UNION ALL SELECT MEM1_HH_STATUS FROM customer 
UNION ALL SELECT MEM2_HH_STATUS FROM customer 
UNION ALL SELECT MEM3_HH_STATUS FROM customer 
UNION ALL SELECT MEM4_HH_STATUS FROM customer 
UNION ALL SELECT MEM5_HH_STATUS FROM customer 
UNION ALL SELECT MEM6_HH_STATUS FROM customer 
UNION ALL SELECT MEM7_HH_STATUS FROM customer 
UNION ALL SELECT MEM8_HH_STATUS FROM customer)A 
WHERE LEAD_HOUSEHLD_STATUS IN ('H','D','P','U','W','Y') 
GROUP BY LEAD_HOUSEHLD_STATUS ;

以上代码输出是这样的:

hive> select * from hh_member_type ;
OK
277 Deceased
20636   Head
3547    Aged Parent At Home
18926   UnkNown
16184   Spouse
7082    Young Adult
Time taken: 0.195 seconds,Fetched: 6 row(s)

我尝试使用以下代码创建百分比突破,但未获得所需的输出。任何建议都会很棒。

CREATE TABLE hh_member_percent AS 
SELECT a.hh_status,round(a.count/sum(a.count) * 100,2) 
  from hh_member_type a 
 group by a.count,a.hh_status ;

解决方法

使用分析功能sum():

SELECT a.hh_status,round(a.count/sum(a.count) over() * 100,2) 
  from hh_member_type a 
;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...