我需要计算该表有多少低于平均水平的工资


SELECT
*, 
COUNT (AnnualSalary < avg(AnnualSalary)) AS Count 
FROM Assessment 
GROUP BY ServiceType

这是一个 Hive 查询,我试图计算表中有多少记录的收入低于平均工资

首先,根据行ServiceType将行分配到不同的分区中。如果不指定ORDER BY和窗口规范,则默认值为ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

然后,将聚合AVG作为分析函数应用于每个窗口,以获取每个分区的平均年薪。因此,我们可以知道记录的年薪是否低于其分区的平均值。

最后,对中间结果集进行计数。

SELECT
SERVICETYPE,
SUM(ISBELOW)
FROM (
SELECT 
*, 
CASE 
WHEN ANNUALSALARY < AVG(ANNUALSALARY) OVER (PARTITION BY SERVICETYPE) THEN 1
ELSE 0
END AS ISBELOW
FROM ASSESSMENT
) TMP
GROUP BY SERVICETYPE
;

请注意,HAVING子句用于在GROUP BY之后进行过滤,并且各个行的详细信息在过滤器之前会丢失。

最新更新