根据问题写出具体的sql语句

现需要一个关于学生的表(stuscore),表中包含字段姓名(name),课程(subject),成绩(score),学号(stuid);
给出以下数据

张三  语文  81  1

张三  数学  78  1

张三  物理  77  1

李四  语文  80  2

李四  数学  91  2

李四  物理  79  2

(1)创建表,并插入数据

(2)查询学生总成绩并按照总成绩排名(显示结果为姓名,总成绩)

(3)查询单科成绩最好的前两名(显示结果:姓名,成绩,科目)

(4)按照平均成绩排名

sql

2个回答

(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

cghsir
cghsir 刚刚看了一下 avg是平均值函数。学习了~
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐