(1)修改函数Fun_Score,将学生成绩转换为等级输出。使用Case When子句实现(大于等于90分“优秀”,80分到90分“良好”,70分到80分“中”,60分到70分“及格”,小于60分“不及格”,否则“未考”)
时间: 2023-10-02 21:12:14 浏览: 56
好的,可以通过以下代码修改Fun_Score函数来实现:
```sql
CREATE OR REPLACE FUNCTION Fun_Score (Score FLOAT)
RETURNS VARCHAR(10)
AS $$
BEGIN
RETURN CASE
WHEN Score >= 90 THEN '优秀'
WHEN Score >= 80 THEN '良好'
WHEN Score >= 70 THEN '中'
WHEN Score >= 60 THEN '及格'
WHEN Score < 60 THEN '不及格'
ELSE '未考'
END;
END;
$$ LANGUAGE plpgsql;
```
这个函数将一个浮点数类型的成绩作为输入,并将其转换为对应的等级输出。使用了 `CASE WHEN` 子句,根据不同的分数区间返回对应的等级。
相关问题
请写出sql语句实现修改函数Fun_Score,将学生成绩转换为等级输出。使用Case When子句实现(大于等于90分“优秀”,80分到90分“良好”,70分到80分“中”,60分到70分“及格”,小于60分“不及格”,否则“未考”)
好的,可以使用以下 SQL 语句来修改 Fun_Score 函数:
```sql
ALTER FUNCTION Fun_Score(Score FLOAT)
RETURNS VARCHAR(10) AS $$
BEGIN
RETURN CASE
WHEN Score >= 90 THEN '优秀'
WHEN Score >= 80 THEN '良好'
WHEN Score >= 70 THEN '中'
WHEN Score >= 60 THEN '及格'
WHEN Score < 60 THEN '不及格'
ELSE '未考'
END;
END;
$$ LANGUAGE plpgsql;
```
这个 SQL 语句使用了 ALTER FUNCTION 语句来修改 Fun_Score 函数。在函数体内部,我们使用了 `CASE WHEN` 子句来实现对成绩的等级判断,并返回对应的等级。修改后的函数可以将浮点数类型的成绩转换为对应的等级输出。
case when 嵌套聚合函数
当我们需要在 CASE WHEN 子句中嵌套聚合函数时,需要注意以下两点:
1. 聚合函数应该放在 CASE WHEN 子句中,而不是放在 THEN 或 ELSE 子句中。
2. 如果需要在 SELECT 子句中引用 CASE WHEN 子句中的聚合函数,需要使用子查询或者 CTE(公共表表达式)将其结果保存到一个临时表中。
例如,下面的 SQL 查询将订单表中金额大于 100 的订单按照客户类型进行统计,并将结果按照客户类型和统计值降序排序:
```
WITH high_amount_orders AS (
SELECT
customer_type,
COUNT(*) AS order_count,
SUM(CASE WHEN amount > 500 THEN 1 ELSE 0 END) AS high_amount_count
FROM orders
GROUP BY customer_type
)
SELECT
customer_type,
order_count,
high_amount_count,
CAST(high_amount_count AS FLOAT) / CAST(order_count AS FLOAT) AS high_amount_ratio
FROM high_amount_orders
ORDER BY customer_type ASC, order_count DESC;
```
在上面的查询中,我们将 CASE WHEN 子句嵌套在了 SUM 函数中,实现了对金额大于 500 的订单数量进行统计。同时,我们使用了 CTE 将查询结果保存到一个临时表中,并在 SELECT 子句中引用了临时表中的聚合函数。这样可以方便地对数据进行处理和分析。
阅读全文