有两张表,如下班级表
ID //学生ID
ClassName //班级名
Grade //该班所属年级
ScoreID //该班成绩单ID成绩表(存放了该班所有同学的成绩,只要是同一个班的学生的成绩单ID都是一样的,不同班才不一样)
ScoreID //成绩单ID
chinese //语文成绩
math //数学成绩
目的:找出某个年级的每个班上数学成绩分最高的那些成绩单。比如,一年级有3个班,那么就应该找出3条上面的记录出来,例如
ClassName 语文成绩 数学成绩
一年级一班 80 90
一年级二班 70 80
一年级三班 60 40
怎么写这个SQL语句?谢谢大家了
ID //学生ID
ClassName //班级名
Grade //该班所属年级
ScoreID //该班成绩单ID成绩表(存放了该班所有同学的成绩,只要是同一个班的学生的成绩单ID都是一样的,不同班才不一样)
ScoreID //成绩单ID
chinese //语文成绩
math //数学成绩
目的:找出某个年级的每个班上数学成绩分最高的那些成绩单。比如,一年级有3个班,那么就应该找出3条上面的记录出来,例如
ClassName 语文成绩 数学成绩
一年级一班 80 90
一年级二班 70 80
一年级三班 60 40
怎么写这个SQL语句?谢谢大家了
create table lkClass (
id int not null primary key,
classname varchar(20),
grade varchar(20),
scoreid int
);create table lkScore (
scoreid int default null,
chinese int default 0,
math int default 0,
key `fk_class` (`scoreid`),
constraint `fk_class` foreign key (`scoreid`) references `lkClass`(`id`)
);
set names gbk;
insert into lkclass(id,classname,grade,scoreid) values
(1,'一班','三年级',1),
(5,'一班','四年级',5),
(2,'二班','三年级',2),
(3,'三班','三年级',3),
(4,'四班','三年级',4);
insert into lkscore values
(1,90,80),
(2,100,99),
(3,29,98),
(4,87,79),
(5,89,99),
(1,49,98),
(3,98,56),
(2,76,88),
(2,80,90),
(3,90,70),
(1,90,90),
(1,67,90);select concat(a.grade,a.classname),b.chinese,max(b.math) from lkclass a,lkscore b where a.scoreid = b.scoreid and a.grade = '三年级'
group by b.scoreid;结果:
query result(4 records)
concat(a.grade,a.classname) chinese max(b.math)
三年级一班 90 98
三年级二班 100 99
三年级三班 29 98
三年级四班 87 79
(
select * from
(
select * from lkscore order by math desc
) T group by scoreid
) b
where a.scoreid = b.scoreid and a.grade = '三年级';
query result(4 records)
concat(a.grade,a.classname) chinese math
三年级一班 49 98
三年级二班 100 99
三年级三班 29 98
三年级四班 87 79
虽然我现在还没看明白,但是肯定会把它搞明白的,也不枉你你花时间解答。