sql - 根据另一个表更新一个表中每个学生的最高分
问题描述
在这里,我有几个表,如下所示:
表 SINHVIEN:
MaSV HoSV TenSV GioiTinh NgaySinh NoiSinh MaKH HocBong DiemTB
SV01 Lê Kim Lan Nữ 23/02/1990 Hà nội HTTT 130000
SV02 Trần Minh Chánh Nam 24/12/1992 Bình Định MANG 150000
SV03 Lê An Tuyết Nữ 21/02/1991 Hải phòng HTTT 170000
SV04 Trần Anh Tuấn Nam 20/12/1993 TpHCM MANG 80000
SV05 Trần Thị Mai Nữ 12/08/1991 TpHCM CNPM 0
SV06 Lê Thị Thu Thủy Nữ 02/01/1991 An Giang HTTT 0
SV07 Nguyễn Kim Thư Nữ 02/02/1990 Hà Nội CNPM 180000
SV08 Lê Văn Long Nam 08/12/1992 TpHCM HTTT 190000
表 KETQUA:
Masv MaMH LanThi Diem KetQua
SV01 CSDL 1 3
SV01 CSDL 2 6
SV01 TTNT 1 5.5
SV01 TTNT 2 6
SV01 MMT 1 5
SV02 CSDL 1 4.5
SV02 CSDL 2 7
SV02 MMT 1 10
SV02 CTDL 1 9
SV03 CSDL 1 2
SV03 CSDL 2 5
SV03 MMT 1 2.5
SV03 MMT 2 4
SV04 CSDL 1 4.5
SV04 CTDL 1 10
SV05 CSDL 1 7
SV05 MMT 1 2.5
SV05 MMT 2 5
SV06 TTNT 1 6
SV06 DHMT 1 10
我想根据 KETQUA 表中的 DIEM 列为每个学生更新 DiemTB(这是每个学生的最高分),以便为 Sinhvien 表中的每个 MonHoc 更新。
到目前为止我的代码:
UPDATE SINHVIEN
SET DIEMTB = T2.DIEM
FROM SINHVIEN JOIN KETQUA T2
ON SINHVIEN.MASV = T2.MASV AND T2.DIEM = (SELECT MAX(DIEM) FROM KETQUA GROUP BY MASV)
我知道没有像这样为每个学生更新 DIEM 的正确方法,因为该语句(SELECT MAX(DIEM) FROM KETQUA GROUP BY MASV)
返回每个学生的最高分数,但 T2.DIEM 一次可以处理一个学生。您能帮我更改修改此代码,以便我的代码可以根据 KETQUA 表上的 DIEM 更新 Sinhvien 表中每个学生的最高分吗?谢谢!
解决方案
这也应该使用类似于您的尝试的连接工作
UPDATE SINHVIEN
SET DIEMTB = T2.MAXDIEM
FROM SINHVIEN JOIN
(SELECT MAX(DIEM) AS MAXDIEM, MASV FROM KETQUA GROUP BY MASV) T2
ON SINHVIEN.MASV = T2.MASV
推荐阅读
- solr - SOLR:如何将数据复制到具有过滤值的另一个字段?
- javascript - 单击 html 按钮从服务器运行 Python 文件
- ios - 动态框架 iOS 的依赖问题
- visual-studio-2019 - Visual Studio 2019 版本 16.4.5 NUnit 加载失败
- python - 合并后删除不必要的列
- r - 用R中的最后一个非空值填充空行
- amazon-web-services - 获取自某个日期以来创建的 EC2 实例列表
- node.js - NodeJs JSON.parse - SyntaxError:JSON 中位置 0 处的意外标记 u
- python - Hwo 在 Python > 3.6 中从 Simulink 模型生成代码
- r - R Studio:如何将空白值替换为第二列的相应行值