如何在 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
我不确定标题是否很好地解释了我的问题,我会在这里详细说明。
我有一个名为 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