滴滴数据分析实习SQL笔试题
生活随笔
收集整理的這篇文章主要介紹了
滴滴数据分析实习SQL笔试题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、有兩個數據表,請通過SQL實現下面題目
學生表(tb_student)
| 張三 | 2017C3301001 | 2017C3301 | 2017 | 18 | 男 | 計算機 |
| 李四 | 2017C3301002 | 2017C3301 | 2017 | 19 | 男 | 計算機 |
學生成績表(tb_score)
| 2017C3301001 | 數據庫 | 75 |
| 2017C3301002 | 數據庫 | 85 |
| 2017C3301001 | 應用數學 | 80 |
建表語句:
create table tb_student ( name varchar(40) not null, id varchar(40) not null, class varchar(40) not null, in_time integer not null,age integer not null,sex varchar(40) not null, major varchar(40) not null, unique(id) ); create table tb_score ( id varchar(40) not null, course varchar(40) not null,score integer not null );插入數據:
insert into tb_student values ('張三', '2017C3301001','2017C3301',2017,18,'男','計算機'); insert into tb_student values ('李四', '2017C3301002','2017C3301',2017,19,'男','計算機');insert into tb_score values ('2017C3301001', '數據庫',75); insert into tb_score values ('2017C3301002', '數據庫',85); insert into tb_score values ('2017C3301001', '應用數學',80);1.篩選出2017年入學的”計算機”專業年齡最小的20位同學名單(姓名、學號、班級、年齡)
SELECT name,id,class,age FROM tb_student WHERE in_time = 2017 AND major = '計算機' ORDER BY age ASC LIMIT 202.統計每個班同學各科成績平均分大于80分的人數和人數占比
方法一:
SELECT c.class, SUM(CASE WHEN c.avg_score > 80 THEN 1 ELSE 0 END) AS '統計每個班同學各科成績平均分大于80分的人數', SUM(CASE WHEN c.avg_score > 80 THEN 1 ELSE 0 END)/COUNT(c.id) AS '統計每個班同學各科成績平均分大于80分的人數占比' FROM(-- 先取出每個同學各科平均成績SELECT a.id,a.class,avg(b.score) AS avg_scoreFROM tb_student a INNER JOIN tb_score b ON a.id=b.idGROUP BY a.id ) c GROUP BY c.class方法二:
SELECT c.class, COUNT(IF(c.avg_score > 80, 1, NULL)) AS '統計每個班同學各科成績平均分大于80分的人數', COUNT(IF(c.avg_score > 80, 1, NULL))/COUNT(c.id) AS '統計每個班同學各科成績平均分大于80分的人數占比' FROM(-- 先取出每個同學各科平均成績SELECT a.id,a.class,avg(b.score) AS avg_scoreFROM tb_student a INNER JOIN tb_score b ON a.id=b.idGROUP BY a.id ) c GROUP BY c.class3.統計出班級“2017C3301”的同學中“數據庫”課程的成績分布數據(結果如下圖,成績按照10分分段,例如:成績在(90-100)分的有10人)
| 90-100 | 10 |
| 80-90 | 15 |
| …… | …… |
| 30-40 | 5 |
| …… | …… |
二、統計以下表中每科成績均大于80分的同學姓名,并輸出他們的總成績排名
score表
| 李三 | 語文 | 75 |
| 李三 | 數學 | 80 |
| 李四 | 語文 | 80 |
| 李四 | 數學 | 81 |
| 李四 | 英語 | 90 |
| 李五 | 語文 | 87 |
| 李五 | 化學 | 92 |
建表語句:
create table score ( name varchar(40) not null, course varchar(40) not null,score integer not null );插入數據:
insert into score values ('李三', '語文',75); insert into score values ('李三', '數學',80); insert into score values ('李四', '語文',80); insert into score values ('李四', '數學',81); insert into score values ('李四', '英語',90); insert into score values ('李五', '語文',87); insert into score values ('李五', '化學',92);題解:
SELECT name, RANK() OVER(ORDER BY total DESC) AS rank FROM(--3.取出符合條件的同學的姓名和總分數SELECT name, SUM(score) AS totalFROM(--2.取出符合條件的同學的姓名和分數SELECT name, score FROM score WHERE name IN-- 1.先取出每科成績都大于80的同學姓名(SELECT nameFROM scoreGROUP BY nameHAVING MIN(score) > 80)) a GROUP BY name) b總結
以上是生活随笔為你收集整理的滴滴数据分析实习SQL笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 研究生开题报告需要注意的几点
- 下一篇: Asp.net--DropDownLis