如何在 Hive 中找到一组的 AVG 并与之进行比较

How can I find AVG of a group in Hive and compare against it

我不确定标题是否很好地解释了我的问题,我会在这里详细说明。

我有一个名为 121_salaries 的 table,它包含 empname、address、jobtitle、department 和 salary 列。

我想求出每个职位的平均工资,然后显示工资明显高于其他职位的员工的信息。

我目前的查询是:

SELECT * FROM (SELECT jobtitle, salary, AVG(salary) OVER() AS avgSal FROM 121_salaries) t WHERE salary > 1.5*avgSal;

此查询为我提供了结果,但它计算了整个工资列的平均值,而不是计算每个职位的平均值。

感谢任何帮助,并提前致谢!

按职位分组以获得每个职位的平均工资,然后加入职位并筛选以获得大于该职位平均工资 1.5 倍的 empname。

SELECT empname,jobtitle 
FROM 121_salaries a JOIN (     
SELECT jobtitle, AVG(salary) avg_salary 
FROM 121_salaries
GROUP BY jobtitle) b on a.jobtitle=b.jobtitle
WHERE a.salary > 1.5 * b.avg_salary

您应该在 avg 计算中使用 partition by,以便计算每个职位的平均值。空的 over() 子句为列中的所有值计算 avg

SELECT * 
FROM (SELECT jobtitle, salary, AVG(salary) OVER(PARTITION BY jobtitle) AS avgSal 
      FROM 121_salaries
     ) t 
WHERE salary > 1.5*avgSal