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

标签 hadoop hive hql average

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

我有一个名为 121_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;

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

感谢任何帮助,并在此先感谢您!

最佳答案

您应该在 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

关于hadoop - 如何在 Hive 中找到一组的 AVG 并与之进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53485209/

相关文章:

hadoop t-file和datablock的关系?

amazon-web-services - Hadoop s3 配置文件丢失

hadoop - 将条件字段添加到 Hive 或 Impala 中的表

java - 如何使用 Java 将表从 MySQL 导入到 Hive?

sql - Hadoop:为什么即使在很小的 table 上,Hive的工作速度仍然如此缓慢?

hadoop - 查询 HIVE 元数据

NHibernate:在映射中指定的复合键之外加入集合

mysql - 数据库查询选择所有列,包括每条记录的计数 'group by'

hql - hibernate的SQL、HQL和Criteria API

hadoop - hive内部hive表和外部hive表的区别