mysql實現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&gt;=a.score  5?)?<p>7.??? 統計如下:<br></p>

學號

姓名

語文

數學

英語

總分

平均分

?

?

?

?

?

?

?

?

?

?

答案

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?score80?AND?SUBJECT=a.subject)優  5?FROM?stuscore?a?GROUP?BY?SUBJECT

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享