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
之后进行过滤,并且各个行的详细信息在过滤器之前会丢失。