mysql如何对给定的分数,去掉一个最高分,去掉一个最低分取平均值,并自定义一个函数
时间: 2024-03-20 20:39:14 浏览: 90
可以使用以下SQL语句来实现:
```
CREATE FUNCTION get_avg_score(scores VARCHAR(255)) RETURNS FLOAT
BEGIN
DECLARE avg_score FLOAT;
DECLARE max_score FLOAT;
DECLARE min_score FLOAT;
SET scores = REPLACE(scores, ' ', '');
SET scores = TRIM(BOTH ',' FROM scores);
SET max_score = SUBSTRING_INDEX(SUBSTRING_INDEX(scores, ',', -2), ',', 1);
SET min_score = SUBSTRING_INDEX(SUBSTRING_INDEX(scores, ',', 2), ',', -1);
SET scores = REPLACE(scores, CONCAT(',', max_score, ','), ',');
SET scores = REPLACE(scores, CONCAT(',', min_score, ','), ',');
SET avg_score = AVG(scores);
RETURN avg_score;
END;
```
该函数使用了以下步骤:
1. 声明一个变量 `avg_score` 来存储平均值。
2. 声明两个变量 `max_score` 和 `min_score` 来存储最高分和最低分。
3. 使用 `REPLACE` 函数去除分数字符串中的空格和逗号,并使用 `TRIM` 函数去除字符串两端的逗号。
4. 使用 `SUBSTRING_INDEX` 函数获取分数字符串中的最高分和最低分。
5. 使用 `REPLACE` 函数去除分数字符串中的最高分和最低分。
6. 使用 `AVG` 函数计算平均值,并将结果存储在 `avg_score` 变量中。
7. 使用 `RETURN` 语句返回平均值。
例如,如果给定的分数字符串为 `10,20,30,40,50`,则调用该函数 `SELECT get_avg_score('10,20,30,40,50')` 将返回 `30`。
阅读全文