使用case when 定义聚合键
时间: 2023-07-08 16:45:43 浏览: 48
可以使用case when语句来定义聚合键。比如,假设我们有一个订单表,其中包括订单号、客户ID、订单日期和订单金额等字段。我们想要按照客户ID来统计每个客户的订单总金额,并将客户分为高、中、低三档。可以使用如下SQL语句来实现:
```
SELECT
customer_id,
SUM(order_amount) AS total_order_amount,
CASE
WHEN SUM(order_amount) >= 1000 THEN '高'
WHEN SUM(order_amount) >= 500 THEN '中'
ELSE '低'
END AS customer_level
FROM
orders
GROUP BY
customer_id;
```
在上述SQL语句中,我们使用了case when语句来定义客户的三个级别,并将其作为一个新的字段输出。同时,我们使用了SUM函数来统计每个客户的订单总金额,并按照客户ID进行分组。
相关问题
使用case when 定义聚合键,在hiving设置新条件
在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函数来统计每个科目的平均分,并按照科目进行分组。这样就可以方便地对学生成绩进行分析和比较。
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函数计算总成绩数量,并将二者相除得到及格率。这样就可以方便地对成绩进行筛选和分析。