三度网教程:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

mysql完成SQL统计的案例

时间:2022-12-12作者:未知来源:三度网教程人气:


SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。
建表语句

/*Table structure for table `stuscore` */ DROP TABLE IF EXISTS `stuscore`; CREATE TABLE `stuscore` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `subject` varchar(20) DEFAULT NULL, `score` varchar(20) DEFAULT NULL, `stuid` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; /*Data for the table `stuscore` */ insert into `stuscore`(`id`,`name`,`subject`,`score`,`stuid`) values (1,'张三','数学','89','1'), (2,'张三','语文','80','1'), (3,'张三','英语','70','1'), (4,'李四','数学','90','2'), (5,'李四','语文','70','2'), (6,'李四','英语','80','2'), (7,'王五','数学','55','3'), (8,'王五','语文','92','3'), (9,'王五','英语','74','3'), (10,'赵六','数学','62','4'), (11,'赵六','语文','81','4'), (12,'赵六','英语','93','4'); 建表语句

mysql实现SQL统计的实例

问题:

1. 计算每个人的总成绩并排名(要求显示字段:姓名,总成绩)

答案


1 SELECT a.name, SUM(score) sum_score FROM stuscore a 2 GROUP BY a.name ORDER BY sum_score DESC

2. 计算每个人的总成绩并排名(要求显示字段: 学号,姓名,总成绩)

答案


1 SELECT a.stuid, a.name, SUM(score) sum_score FROM stuscore a 2 GROUP BY a.name ORDER BY sum_score DESC

3. 计算每个人单科的最高成绩(要求显示字段: 学号,姓名,课程,最高成绩)

答案


1 SELECT a.stuid, a.name, a.subject, a.score FROM stuscore a 2 JOIN ( 3 SELECT stuid, MAX(score) max_score FROM stuscore GROUP BY stuid4 )b ON a.stuid=b.stuid5 WHERE a.score=b.max_score

4. 计算每个人的平均成绩(要求显示字段: 学号,姓名,平均成绩)

答案


1 SELECT DISTINCT a.stuid, a.name, b.avg_score FROM stuscore a 2 JOIN ( 3 SELECT stuid, AVG(score) avg_score FROM stuscore GROUP BY stuid 4 )b ON a.stuid=b.stuid

5. 列出各门课程成绩最好的学生(要求显示字段: 学号,姓名,科目,成绩)

答案


1 SELECT DISTINCT a.stuid, a.name, a.subject, a.score FROM stuscore a 2 JOIN ( 3 SELECT subject, MAX(score) max_score FROM stuscore GROUP BY subject 4 )b ON a.subject=b.subject5 WHERE a.score=b.max_score

6. 列出各门课程成绩最好的两位学生(要求显示字段: 学号,姓名,科目,成绩)

答案

1 SELECT a.stuid, a.name, a.subject, a.score FROM stuscore a 2 WHERE ( 3 SELECT COUNT(1) FROM stuscore b 4 WHERE a.subject=b.subject AND b.score>=a.score 5 ) <= 2 6 ORDER BY a.subject ASC, a.score DESC

7. 统计如下:

学号

姓名

语文

数学

英语

总分

平均分

答案

1 SELECT stuid 学号, NAME 姓名, 2 SUM(CASE WHEN SUBJECT='语文' THEN score ELSE 0 END) 语文, 3 SUM(CASE WHEN SUBJECT='数学' THEN score ELSE 0 END) 数学, 4 SUM(CASE WHEN SUBJECT='英语' THEN score ELSE 0 END) 英语, 5 SUM(score) 总分, (SUM(score)/COUNT(1)) 平均分 6 FROM stuscore GROUP BY 学号

8.列出各门课程的平均成绩(要求显示字段:课程,平均成绩)

答案

1 SELECT SUBJECT, AVG(score) avg_score FROM stuscore GROUP BY SUBJECT

9.列出数学成绩的排名(要求显示字段:学号,姓名,成绩,排名)

答案

1 SELECT a.*, @var:=@var+1 rank 2 FROM( 3 SELECT stuid, NAME, score FROM stuscore 4 WHERE SUBJECT='数学' ORDER BY score DESC 5 )a, (SELECT @var:=0)b

10.列出数学成绩在2-3名的学生(要求显示字段:学号,姓名,科目,成绩)

答案

1 SELECT b.* FROM( 2 SELECT a.* FROM( 3 SELECT stuid, NAME, score FROM stuscore 4 WHERE SUBJECT='数学' ORDER BY score DESC 5 LIMIT 3 6 )a ORDER BY score ASC LIMIT 2 7 )b ORDER BY score DESC 8 9 #注:当数学成绩只有2条以下数据时,此方法失效!

11.求出李四的数学成绩的排名

答案

1 SELECT a.*, @var:=@var+1 rank 2 FROM( 3 SELECT stuid, NAME, score FROM stuscore 4 WHERE SUBJECT='数学' ORDER BY score DESC5 )a, (SELECT @var:=0)b 6 WHERE a.name='李四'

12.统计如下:

课程

不及格(0-59)个

良(60-80)个

优(81-100)个

答案

1 SELECT a.subject 课程, 2 (SELECT COUNT(1) FROM stuscore WHERE score<60 AND SUBJECT=a.subject)不及格, 3 (SELECT COUNT(1) FROM stuscore WHERE score BETWEEN 60 AND 80 AND SUBJECT=a.subject)良, 4 (SELECT COUNT(1) FROM stuscore WHERE score>80 AND SUBJECT=a.subject)优 5 FROM stuscore a GROUP BY SUBJECT

以上就是mysql实现SQL统计的实例的详细内容,更多请关注php中文网其它相关文章!


学习教程快速掌握从入门到精通的SQL知识。

关键词:  mysql完成SQL统计的案例





Copyright © 2012-2018 三度网教程(http://www.3du8.cn) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版