hive子查询
时间: 2023-07-26 10:03:24 浏览: 78
Hive子查询(Subquery)是指在一个查询语句中嵌套另外一个完整的查询语句,用于限制或过滤结果集。在Hive中,子查询可以嵌套到SELECT、FROM、WHERE和HAVING子句中。
下面是一些示例:
1. 在SELECT子句中使用子查询
```
SELECT name, age
FROM student
WHERE age = (SELECT MAX(age) FROM student);
```
上面的查询语句中,子查询 `(SELECT MAX(age) FROM student)` 返回了student表中age列的最大值,它作为外部查询中的过滤条件,限制了结果集只包含age列的最大值所对应的记录。
2. 在FROM子句中使用子查询
```
SELECT t1.name, t1.age, t2.avg_score
FROM student t1
JOIN
(SELECT AVG(score) as avg_score, class_id
FROM score
GROUP BY class_id) t2
ON t1.class_id = t2.class_id;
```
上面的查询语句中,子查询 `(SELECT AVG(score) as avg_score, class_id FROM score GROUP BY class_id)` 返回了score表中每个班级的平均成绩。它作为外部查询的一个虚拟表,与student表进行JOIN操作,计算每个学生所在班级的平均成绩。
3. 在WHERE子句中使用子查询
```
SELECT name, age
FROM student
WHERE class_id IN (SELECT class_id FROM score WHERE score >= 60);
```
上面的查询语句中,子查询 `(SELECT class_id FROM score WHERE score >= 60)` 返回了score表中成绩大于等于60分的班级ID,它作为外部查询中的过滤条件,限制了结果集只包含在这些班级中的学生记录。
4. 在HAVING子句中使用子查询
```
SELECT class_id, AVG(score) as avg_score
FROM score
GROUP BY class_id
HAVING AVG(score) >= (SELECT AVG(score) FROM score);
```
上面的查询语句中,子查询 `(SELECT AVG(score) FROM score)` 返回了整个score表的平均成绩,它作为外部查询的过滤条件,只保留班级平均成绩大于等于该值的记录。