如何在hive中找到组的平均值并与之进行比较

wlsrxk51  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(552)

我不确定标题是否能很好地解释我的问题,我将在这里正确地详述它。
我有一个名为121\u salaries的表,其中有empname、address、jobtitle、department和salary列。
我想找到每个职位的平均工资,然后显示工资明显高于其他职位的员工的信息。
到目前为止,我的疑问是:

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

这个查询给我的结果,但它平均整个薪资列,而不是找到每个职位的平均值。
感谢您的帮助,并提前向您表示感谢!

yx2lnoni

yx2lnoni1#

按jobtitle分组以获取每个jobtitle的平均薪资,然后加入jobtitle并筛选以获取大于该jobtitle平均薪资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
5uzkadbs

5uzkadbs2#

你应该使用 partition byavg 计算每个职位的平均值。空的 over() 子句计算 avg 对于列中的所有值。

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

相关问题