使用case when 定义聚合键,在hiving设置新条件
时间: 2024-03-19 17:43:40 浏览: 92
在Hive中,也可以使用case when语句来定义聚合键,并在其基础上设置新条件。比如,我们有一个学生成绩表,其中包括学生姓名、科目和成绩等字段。我们想要按照科目来统计每个科目的平均分,并将平均分分为优秀、良好、及格和不及格四个等级。可以使用如下HiveQL语句来实现:
```
SELECT
subject,
AVG(score) AS avg_score,
CASE
WHEN AVG(score) >= 90 THEN '优秀'
WHEN AVG(score) >= 80 THEN '良好'
WHEN AVG(score) >= 60 THEN '及格'
ELSE '不及格'
END AS grade
FROM
scores
GROUP BY
subject;
```
在上述HiveQL语句中,我们使用了case when语句来定义每个科目的四个等级,并将其作为一个新的字段输出。同时,我们使用了AVG函数来统计每个科目的平均分,并按照科目进行分组。这样就可以方便地对学生成绩进行分析和比较。
相关问题
sql hiving可以设置常数 聚合函数 指定聚合键为条件
Hive是一个基于Hadoop的数据仓库工具,它支持SQL查询语言。在Hive中,可以使用HAVING关键字来对GROUP BY查询的结果进行筛选,同时可以使用常数、聚合函数和聚合键作为筛选条件。
例如,以下是一个使用HAVING关键字的示例查询语句:
```
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;
```
上述查询语句表示,以department字段为聚合键,计算每个部门的平均工资,并只返回平均工资大于50000的部门。
在上述查询语句中,常数可以直接写在HAVING条件中,例如:
```
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000 AND COUNT(*) > 10;
```
上述查询语句表示,只返回平均工资大于50000且部门人数大于10人的部门。
同时,聚合函数也可以作为HAVING条件,例如:
```
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(*) > 10 AND MAX(salary) > 80000;
```
上述查询语句表示,只返回部门人数大于10人且最高工资大于80000的部门。
sql hiving指定聚合键为条件
在Hive中,可以使用HAVING关键字和GROUP BY子句来指定聚合键,并将聚合键作为HAVING条件中的筛选条件。
例如,以下是一个使用GROUP BY和HAVING关键字的示例查询语句:
```
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING department = 'IT';
```
上述查询语句表示,以department字段为聚合键,计算每个部门的平均工资,并只返回部门为IT的记录。
在上述查询语句中,GROUP BY子句指定了department字段为聚合键,而HAVING关键字中的department = 'IT'则将聚合键为IT的记录筛选出来。
除了可以在HAVING条件中指定聚合键,还可以在SELECT语句中使用CASE WHEN语句来自定义聚合键,例如:
```
SELECT
CASE WHEN salary > 50000 THEN 'High' ELSE 'Low' END AS salary_level,
AVG(salary)
FROM employees
GROUP BY salary_level
HAVING salary_level = 'High';
```
上述查询语句表示,根据salary字段的值将记录分为'High'和'Low'两种级别,计算每个级别的平均工资,并只返回salary_level为'High'的记录。在该查询语句中,使用了CASE WHEN语句来自定义聚合键。
阅读全文