select b.studentname,b.studentid,
(select top 1 classname
from class_t A where a.classid=b.classid) classname,
(select sum(score) from test where studentid=b.studentid) score
from student_t B
(select top 1 classname from class_t A where a.classid=b.classid) classname问下这里classname是指的class_t第一行classname的结果,还是class_t的classname列所有数据
(select top 1 classname
from class_t A where a.classid=b.classid) classname,
(select sum(score) from test where studentid=b.studentid) score
from student_t B
(select top 1 classname from class_t A where a.classid=b.classid) classname问下这里classname是指的class_t第一行classname的结果,还是class_t的classname列所有数据
from class_t A where a.classid=b.classid)查询结果列的别名而已,这一列可能是class_t表中的部分数据,也可能是所有的数据。不过从应用场景来看,应该是这个表的部分数据。关键在a.classid=b.classid这个条件。
的结果集合
张三 101 一班 477
李四 102 二班 395
王武 103 三班 439
赵六 104 四班 451
陈九 105 五班 448
刘二 106 六班 480
张1 107 一班 440
李3 108 二班 437
王5 109 三班 363
赵6 110 四班 416
陈9 111 五班 433
刘2 112 六班 379
2三 113 一班 433
1四 114 二班 463
3武 115 三班 431如果说是哪一行的结果集,为什么最后classname所有的数据都有啊 二不是第一行的
第二个classname 是整个结果集(select top 1 classname from class_t A where a.classid=b.classid)的笔名。
(select top 1 classname
from class_t A where a.classid=b.classid) classname,
(select sum(score) from test where studentid=b.studentid) score
from student_t B结果是studentname studentid classname score张三 101 一班 477
李四 102 二班 395
王武 103 三班 439
赵六 104 四班 451
陈九 105 五班 448
刘二 106 六班 480
张1 107 一班 440
李3 108 二班 437
王5 109 三班 363
赵6 110 四班 416
陈9 111 五班 433
刘2 112 六班 379
2三 113 一班 433
1四 114 二班 463
3武 115 三班 431
select b.studentname,b.studentid,
(select top 1 classname
from class_t A where a.classid=b.classid) classname,
(select sum(score) from test where studentid=b.studentid) score
from student_t B
where studentid=(select top 1 studentid
from student_t where classid=b.classid)结果是studentname studentid classname score张三 101 一班 477
李四 102 二班 395
王武 103 三班 439
赵六 104 四班 451
陈九 105 五班 448
刘二 106 六班 480
为什么加了
where studentid=(select top 1 studentid
from student_t where classid=b.classid)
以后只有六条结果select studentid
from student_t B where classid=b.classid结果是studentid101
102
103
104
105
106
107
108
109
110
111
112
113
114
115顺便能帮我看这个吗,既然是where studentid=(select top 1 studentidfrom student_t where classid=b.classid)studentid是结果集,那么应该等于15结果啊。
select b.studentname,b.studentid,
(select top 1 classname
from class_t A where a.classid=b.classid) classname,
(select sum(score) from test where studentid=b.studentid) score
from student_t B
where studentid=(select top 1 studentid
from student_t where classid=b.classid)第一个括号:select top 1 classname
from class_t A where a.classid=b.classid
是从课程表中选择出学生所在班级的名称classname ,这里用top 1说明学生可能属于多个班级,因此选择第一个班级。第二个括号:select sum(score) from test where studentid=b.studentid) score
from student_t B
很明显是求得学生学分总和第三个括号:select top 1 studentid
from student_t where classid=b.classid
就是在班级b.classid的班中学好最靠前的一名学生。所以合起来就是,选在在本班级中学号靠前的一名学生的成绩 学号 班级等。
换句话说就是核对所有的学生,看他是不是他所在班级学号的最前一名,是的话就显示。