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 HAVING SUM(CASE WHEN score >= 60 THEN 1 ELSE 0 END) / COUNT(*) >= 0.8; 对么
时间: 2024-04-05 10:33:24 浏览: 8
是的,这个SQL语句的语法是正确的,可以在Hive中执行。这个SQL语句的作用是:从学生成绩表中统计每个科目的平均分,并将平均分分为优秀、良好、及格和不及格四个等级。然后,对及格成绩率大于等于80%的科目进行筛选,并输出结果。其中,使用了AVG函数、CASE WHEN语句、SUM函数、COUNT函数以及HAVING语句等SQL关键字和函数。
相关问题
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 HAVING SUM(CASE WHEN score >= 60 THEN 1 ELSE 0 END) / COUNT(*) >= 0.8;
这是一个 SQL 查询语句,用于计算各科目的平均分和成绩等级,并筛选出及格率达到80%以上的科目。具体来说,它会从成绩表(scores)中选出每个科目(subject),计算该科目的平均分(avg_score),并根据平均分计算出成绩等级(grade)。然后,它会筛选出及格率(即分数大于等于60分的人数占总人数的比例)达到80%以上的科目。
having设置条件 包含case when 定义聚合键
在Hive中,可以使用HAVING语句在GROUP BY子句的结果集上设置条件。如果我们想要基于case when语句定义的聚合键,对结果集进行过滤,可以将case when语句嵌套在HAVING语句中。例如:
```
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
HAVING
SUM(CASE
WHEN score >= 60 THEN 1
ELSE 0
END) / COUNT(*) >= 0.8;
```
在上述HiveQL语句中,我们使用HAVING语句过滤了平均成绩及格率大于等于80%的科目。在HAVING语句中,我们使用SUM和CASE WHEN语句来计算及格成绩的数量,使用COUNT函数计算总成绩数量,并将二者相除得到及格率。这样就可以方便地对成绩进行筛选和分析。