日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

滴滴数据分析实习SQL笔试题

發布時間:2023/12/10 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 滴滴数据分析实习SQL笔试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、有兩個數據表,請通過SQL實現下面題目

學生表(tb_student)

學生姓名(name)學號(id)班級(class)入學時間(in_time)年齡(age)性別(sex)專業(major)
張三2017C33010012017C3301201718計算機
李四2017C33010022017C3301201719計算機

學生成績表(tb_score)

學號(id)課程(course)分數(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 20

2.統計每個班同學各科成績平均分大于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.class

3.統計出班級“2017C3301”的同學中“數據庫”課程的成績分布數據(結果如下圖,成績按照10分分段,例如:成績在(90-100)分的有10人)

成績分布區間人數
90-10010
80-9015
…………
30-405
…………
SELECT c.level AS '成績分布區間', COUNT(c.level) AS '人數' FROM( SELECT (CASE WHEN score>=90 AND score<=100 THEN '90-100'WHEN score>=80 AND score<90 THEN '80-90'WHEN score>=70 AND score<80 THEN '70-80'WHEN score>=60 AND score<70 THEN '60-70'WHEN score>=50 AND score<60 THEN '50-60'WHEN score>=40 AND score<50 THEN '40-50'WHEN score>=30 AND score<40 THEN '30-40'WHEN score>=20 AND score<30 THEN '20-30'WHEN score>=10 AND score<20 THEN '10-20'WHEN score>=0 AND score<10 THEN '0-10'END) AS level FROM tb_student a INNER JOIN tb_score b ON a.id = b.id WHERE class = '2017C3301' AND course = '數據庫' ) c GROUP BY c.level

二、統計以下表中每科成績均大于80分的同學姓名,并輸出他們的總成績排名

score表

姓名(name)課程(course)成績(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笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。