mysql实现SQL统计的实例


本文摘自PHP中文网,作者黄舟,侵删。

建表语句

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

/*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');

 

建表语句

问题:

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

答案


1

2

1 SELECT a.name, SUM(score) sum_score FROM stuscore a

2 GROUP BY a.name ORDER BY sum_score DESC

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

答案


1

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

2

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

2

3

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

2

3

4

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

2

3

4

5

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

2

3

4

5

6

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

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

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

答案

1

2

3

4

5

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

2

3

4

5

6

7

8

9

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

2

3

4

5

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

2

3

4

5

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统计的实例的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

mysql如何按时间查询优化

mysql中的索引类型有哪些

mysql如何更改主键

mysql排序区别

navicat远程连接mysql连不上

怎么将mysql服务移除?

解决mysql报错this function has none of deterministic问题

mysql oracle 哪个好学?

基于tags实现内容推荐的方法(代码)

mysql系列教程小白数据库基础

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...