MYSqL测试题2_mysql练习题2

本文结合猴子老师(知乎:'猴子聊数据分析')的常见sql问题,写出了全部解答过程,欢迎大家批评指正。猴子:常见的SQL笔试题和面试题(上):经典50题​zhuanlan.zhihu.com1eda1377cb529fc16925f759d9d8775b.png猴子:常见的SQL笔试题和面试题(下)​zhuanlan.zhihu.com158365f251a9e482e3c676f2ab57cf26.png

14创建两张表employees和department如下:

drop table if exists employees;

create table employees(

employee_id int,

first_name char(20),

department_id int,

salary bigint);

drop table if exists departments;

create table departments(

department_id int,

department_name char(30),

manager_id int,

location_id int);

insert into employees values(100,'Steven',90,24000);

insert into employees values(101,'Neena',90,17000);

insert into employees values(102,'Lex',90,17000);

insert into employees values(103,'Alexander',60,9000);

insert into employees values(104,'Bruce',60,6000);

insert into employees values(105,'David',60,4800);

insert into employees values(106,'Valli',60,4800);

insert into employees values(107,'Diana',60,4200);

insert into employees values(108,'Nancy',100,12000);

insert into employees values(109,'Danicel',100,9000);

insert into employees values(110,'John',100,82000);

insert into employees values(111,'Ismael',100,77000);

insert into employees values(112,'Jose Manuel',100,78000);

insert into employees values(113,'Luis',100,69000);

insert into employees values(114,'Den',30,11000);

insert into employees values(115,'Alexander',30,31000);

insert into employees values(116,'Shelli',30,29000);

insert into employees values(117,'Sigal',30,28000);

insert into departments values(30,'Purchasing',114,1700);

insert into departments values(60,'Purchasing',103,1400);

insert into departments values(90,'Purchasing',100,1700);

insert into departments values(100,'Purchasing',108,1700);

(1)写出SQL得出每个部门的平均工资。

select department_id

,avg(salary) as avg_salary

from employees

group by department_id

;

(2)查询量表得出如下结果:

select e.first_name

,d.department_name

,e.salary

from departments d,employees e

where d.department_id=e.department_id

group by e.first_name

,d.department_name

,e.salary

;

15.如有有一张表player,有id、name两个列,我想知道这张表有多少行数据,id最大的前10位的name是什么,请问这两个SQL语句如何写?

--行数:

select count(id) from player;

--id最大的前10位的name是什么?

drop table if exists player;

create table player(

id int,

name char(20));

insert into player values(1,'Stven');

insert into player values(2,'Steen');

insert into player values(3,'Steven');

insert into player values(4,'Steen');

insert into player values(5,'Stevn');

insert into player values(6,'Steve');

insert into player values(7,'Seven');

insert into player values(8,'Stevyen');

insert into player values(9,'Steven');

insert into player values(10,'Steven');

insert into player values(11,'Sterven');

select name from player

order by id desc

limit 10

;

16.查询一张数据表(tb),基本字段:日期,订单

要求用SQL实现:

周次(week),订单总和,日均订单,极大值订单,极小值订单

--计算两个日期之间相差多少周

select timestampdiff(week,'2017-9-30','2018-11-02'); --56周

--计算两个日期之间相差多少天

select timestampdiff(day,'2017-9-30','2018-11-02');--398天

select timestampdiff(week,'2017-9-30','2018-11-02') as week

,sum(order)

,sum(order)/timestampdiff(day,'2017-9-30','2018-11-02') as avg_order

,max(order)

,min(order)

from tb

group by 1;

---行转列---

17.使用SQL实现以下数据表及总分,平均分(数据表:table)

select ifnull(s_id,'total') as s_id

,sum(if(c_id=01,s_score,0)) as '语文'

,sum(if(c_id=02,s_score,0)) as '数学'

,sum(if(c_id=03,s_score,0)) as '外语'

,sum(if (c_id=04,s_score,0)) as '体育'

,sum(if (c_id=05,s_score,0)) as '物理'

,sum(if (c_id=06,s_score,0)) as '化学'

,sum(s_score) as total

from score

group by s_id with rollup;

18.表group有四个字段,表结构如下:

drop table if exists group;

create table group (

id bigint comment'群号',

name varchar(50) comment'群名',

class varchar(20) comment'群类别'

num int comment'群成员数量');

insert into group values(1,'一起打球','篮球',10);

insert into group values(2,'来玩球吧','篮球',15);

insert into group values(3,'滨江一霸','篮球',5);

insert into group values(4,'足球小将','足球',20);

insert into group values(5,'绝代双骄','足球',30);

insert into group values(6,'玩个球啊','乒乓',19);

PK为id

--求群数量少于1000的群类别?

select class from group1

where num<1000;

19区间划分问题,使用case语句

drop table if exists deptsales;

create table deptsales(

dept_id int,

submonth char(30),

sales int,

deptname varchar(20));

insert into deptsales values(1,1,55,'NULL');

insert into deptsales values(2,1,66,'NULL');

insert into deptsales values(3,1,77,'NULL');

insert into deptsales values(2,2,34,'NULL');

insert into deptsales values(4,2,56,'NULL');

insert into deptsales values(3,3,78,'NULL');

---列转行--

select dept_id as '部门'

,sum(case when submonth=1 then sales else 0 end ) as '一月销售额'

,sum(case when submonth=2 then sales else 0 end) as '二月销售额'

,sum(case when submonth=3 then sales else 0 end) as '三月销售额'

,sum(case when submonth=4 then sales else 0 end) as '四月销售额'

from deptsales

group by dept_id

;

---计算每个部门每个月销售额及销售额总额--

select ifnull(dept_id,'总销售额') as dept_id

,sum(case when submonth=1 then sales else 0 end ) as '一月销售额'

,sum(case when submonth=2 then sales else 0 end) as '二月销售额'

,sum(case when submonth=3 then sales else 0 end) as '三月销售额'

,sum(case when submonth=4 then sales else 0 end) as '四月销售额'

,sum(sales) as '总销售额'

from deptsales

group by dept_id with rollup;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值