*!*
VFP9.0,用到分组 Group by 时
*!*
select 字段1,字段2,字段3,字段4 中的“字段1,字段2,字段3,字段4”必须要用在聚合函数中,或者包含在分组条件中
*!*
列如:
*!*
表1(学号,姓名,科目,成绩,班级)
CREATE CURSOR 表1(学号 C(10),姓名 C(10),科目 C(10),成绩 N(4,1),班级 C(10))
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1001', '张三', '数学', 90, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1001', '张三', '语文', 85, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1001', '张三', '英语', 87, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1002', '李四', '数学', 85, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1002', '李四', '语文', 78, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1002', '李四', '英语', 92, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1003', '王五', '数学', 91, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1003', '王五', '语文', 88, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1003', '王五', '英语', 79, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1004', '赵六', '数学', 92, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1004', '赵六', '语文', 87, '高三(1)')
INSERT INTO 表1(学号,姓名,科目,成绩,班级) VALUES('XH1004', '赵六', '英语', 87, '高三(1)')
*!*
1.求,每个人的最高分
select 学号,姓名,科目,max(成绩) as 最高分,班级 from 表1 group by 学号
*!*
上面的是错误的,因为“姓名,科目,班级”不在聚合函数中,同时,也没有在分组
*!*
正确的是
select 学号,max(成绩) as 最高分 from 表1 group by 学号
*!*
XH1001 90
*!*
XH1002 92
*!*
XH1003 91
*!*
XH1004 92
*!*
但如果要显示“学号,姓名,科目,成绩,班级”,怎么写
*!*
不考虑存在有相同科目分数情况
select t1.学号,t2.姓名,t2.科目,t2.班级,t1.最高分 from (select 学号,MAX(成绩) 最高分 FROM 表1 GROUP BY 学号) as t1 ;
left join 表1 as t2 on t1.学号=t2.学号 AND t2.成绩=t1.最高分