sql 查询科目成绩以及平均成绩

本文介绍如何使用SQL从score表中查询学生各科成绩及其总分,并展示如何通过UNION操作合并不同查询结果,包括去重(UNION)和包含所有记录(UNION ALL)的情况。

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

score表
stuid subject score
1 math 80
1 english 90
2 math 81
2 english 91
3 math 85
3 english 95

要求得到的组合查询结果
id math english sum
1 80 90 170
2 81 91 172
3 85 95 180
avg 82 92 174

(
    SELECT
        stuid as id,
        CAST(sum(case when `subject`='math' then score end) AS SIGNED) as math,
        CAST(sum(case when `subject`='english' then score end) AS SIGNED) as english,
        CAST((
            sum(case when `subject`='math' then score end)
            +
            sum(case when `subject`='english' then score end)
        ) AS SIGNED) as 'sum'
    FROM
        score
    GROUP BY
    stuid
) 
UNION
(
    SELECT
        'avg' as id,
        CAST(avg(case when `subject`='math' then score end) AS SIGNED) as math,
        CAST(avg(case when `subject`='english' then score end) AS SIGNED) as english,
        CAST((
            avg(case when `subject`='math' then score end)
            +
            avg(case when `subject`='english' then score end)
        ) AS SIGNED) as 'sum'
    FROM
        score
)

union 对两个结果集进行并集操作,重复数据只显示一次
union All,对两个结果集进行并集操作,重复数据全部显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值