sql 语文、数学、英语三科成绩,没有成绩的输出为0,按照学生的有效平均成绩降序显示
时间: 2023-11-04 13:26:30 浏览: 153
可以使用 SQL 的 CASE 和 AVG 函数来实现:
```sql
SELECT
student_id,
AVG(CASE WHEN subject = '语文' THEN score ELSE 0 END) AS chinese_score,
AVG(CASE WHEN subject = '数学' THEN score ELSE 0 END) AS math_score,
AVG(CASE WHEN subject = '英语' THEN score ELSE 0 END) AS english_score,
AVG(CASE WHEN score > 0 THEN score ELSE 0 END) AS avg_score
FROM
score_table
GROUP BY
student_id
ORDER BY
avg_score DESC;
```
其中,`score_table` 表示成绩表,包含学生 ID、科目和成绩三个字段。以上 SQL 语句会计算每个学生的语文、数学、英语三科的平均成绩,并将没有成绩的科目得分设置为 0,然后计算有效平均成绩,并按照有效平均成绩降序排列输出。
相关问题
查询学生的语文、数学、英语三科成绩,没有成绩的输出为0,按照学生的有效平均成绩降序显示
好的,您可以使用如下的 SQL 语句来实现:
```sql
SELECT
student_id,
COALESCE(chinese_score, 0) AS chinese_score,
COALESCE(math_score, 0) AS math_score,
COALESCE(english_score, 0) AS english_score,
(COALESCE(chinese_score, 0) + COALESCE(math_score, 0) + COALESCE(english_score, 0)) /
(CASE WHEN chinese_score IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN math_score IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN english_score IS NOT NULL THEN 1 ELSE 0 END) AS avg_score
FROM scores
ORDER BY avg_score DESC;
```
其中,`scores` 是学生成绩表的表名,`student_id` 表示学生的学号,`chinese_score`、`math_score` 和 `english_score` 分别表示学生的语文、数学和英语成绩。`COALESCE` 函数用于将数据库中的 `NULL` 值转换为 0。`CASE` 表达式用于统计每个学生有效成绩的数量,并且只有在至少有一个科目成绩不为空的情况下才会计算平均分。最后,使用 `ORDER BY` 子句对学生的平均分进行降序排列。
请注意,上述 SQL 语句仅供参考,具体实现方式可能因数据库的不同而略有差异。
sql“按照课程号、成绩降序显示课程成绩在70到80之间的学生学号、课程号及成绩。各列标题显示为学号、课程号、成绩。”
你可以使用以下SQL语句来实现此要求:
SELECT 学号, 课程号, 成绩
FROM 成绩表
WHERE 成绩 >= 70 AND 成绩 <= 80
ORDER BY 课程号 DESC, 成绩 DESC;
这个SQL语句会从成绩表中选出成绩在70到80之间的学生的学号、课程号和成绩,并且按照课程号降序、成绩降序的顺序进行排序,最终的结果会显示为三列,分别为学号、课程号和成绩。
阅读全文