mysql统计每个科目平均成绩_mysql、oracle查询学生的各科成绩、总成绩、平均分...

本文通过mysql和oracle数据库,展示如何查询每个学生在数学、语文、英语三科的成绩,包括单科成绩、总成绩和平均分,并按总分降序排列。详细解释了SQL中的CASE和DECODE函数用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据库

t_student表结构及数据

ac67d3e2d2de

t_student

t_score表结构及数据

ac67d3e2d2de

t_score

2.需求

要求按照学生展示该生的各科成绩、总成绩、平均分,并按照总分进行排序,效果如下:

ac67d3e2d2de

结果

3.mysql实现

sql

SELECT

A.id '学号',

A.NAME '姓名',

MAX( CASE B.SUBJECT WHEN '数学' THEN B.score ELSE 0 END ) '数学',

MAX( CASE B.SUBJECT WHEN '语文' THEN B.score ELSE 0 END ) '语文',

MAX( CASE B.SUBJECT WHEN '英语' THEN B.score ELSE 0 END ) '英语',

SUM( B.score ) '总分',

AVG( B.score ) '平均分'

FROM

t_student A

LEFT JOIN t_score B ON A.id = B.s_id

GROUP BY

A.id

ORDER BY

SUM( B.score ) DESC

或者

SELECT

A.id '学号',

A.NAME '姓名',

MAX( CASE WHEN B.SUBJECT = '数学' THEN B.score ELSE 0 END ) '数学',

MAX( CASE WHEN B.SUBJECT = '语文' THEN B.score ELSE 0 END ) '语文',

MAX( CASE WHEN B.SUBJECT = '英语' THEN B.score ELSE 0 END ) '英语',

SUM( B.score ) '总分',

AVG( B.score ) '平均分'

FROM

t_student A

LEFT JOIN t_score B ON A.id = B.s_id

GROUP BY

A.id

ORDER BY

SUM( B.score ) DESC

函数说明

MAX:取最大

SUM:求和

AVG:求平均

CASE:两种用法参考 http://c.biancheng.net/mysql/case.html

4.oracle实现

sql

SELECT

A.id '学号',

A.NAME '姓名',

MAX( DECODE( B.SUBJECT, '数学', B.score, 0 ) ) '数学',

MAX( DECODE( B.SUBJECT, '语文', B.score, 0 ) ) '语文',

MAX( DECODE( B.SUBJECT, '英语', B.score, 0 ) ) '英语',

SUM( B.score ) '总分',

AVG( B.score ) '平均分'

FROM

t_student A

LEFT JOIN t_score B ON A.id = B.s_id

GROUP BY

A.id

ORDER BY

SUM( B.score ) DESC

函数

MAX:取最大

SUM:求和

AVG:求平均

DECODE:DECODE(value, if1, then1, if2, then2, ..., ifN, thenN, else)

DECODE(条件, 值1, 返回值1, 值2, 返回值2, ..., 值N, 返回值N, 缺省值)

DECODE函数与mysql的CASE函数大同小异,只是语法稍稍有所差别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值