现需要一个关于学生的表(stuscore),表中包含字段姓名(name),课程(subject),成绩(score),学号(stuid);
给出以下数据
张三 语文 81 1
张三 数学 78 1
张三 物理 77 1
李四 语文 80 2
李四 数学 91 2
李四 物理 79 2
(1)创建表,并插入数据
(2)查询学生总成绩并按照总成绩排名(显示结果为姓名,总成绩)
(3)查询单科成绩最好的前两名(显示结果:姓名,成绩,科目)
(4)按照平均成绩排名
(1)
-- Table structure for stuscore
DROP TABLE IF EXISTS stuscore
;
CREATE TABLE stuscore
(name
varchar(20) DEFAULT NULL,subject
varchar(20) DEFAULT NULL,score
int(9) DEFAULT NULL,stuid
int(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Records of stuscore
INSERT INTO stuscore
VALUES ('张三', '语文', '81', '1');
INSERT INTO stuscore
VALUES ('张三', '数学', '78', '1');
INSERT INTO stuscore
VALUES ('张三', '物理', '77', '1');
INSERT INTO stuscore
VALUES ('李四', '语文', '80', '2');
INSERT INTO stuscore
VALUES ('李四', '数学', '91', '2');
INSERT INTO stuscore
VALUES ('李四', '物理', '79', '2');
(2)
select t.name
,sum(t.score) from stuscore t GROUP BY t.name
(3)
select t.name
,t.score,t.subject
from stuscore t ORDER BY t.score DESC LIMIT 0,2;
(4)
select t.name
,sum(t.score)/COUNT(t.score) as temp_score from stuscore t GROUP BY t.name ORDER BY temp_score desc;
--1
create table stuscore(name nvarchar(50),[subject] nvarchar(50),score int,stuid int)
Go
insert into stuscore
select '张三','语文',81,1 union all
select '张三','数学',78,1 union all
select '张三','物理',77,1 union all
select '李四','语文',80,2 union all
select '李四','数学',91,2 union all
select '李四','物理',79,2
Go
--2
select name,sum(score) as [总成绩] from stuscore group by name order by sum(score) desc
Go
--3
select top 2 name,score,[subject] from stuscore ORDER BY score DESC
--4
select name,avg(score) from stuscore group by name order by avg(score) desc