牛客网SQL题

1.分页查询employees表,每5行一页,返回第2页的数据。

由于每一页有5行,注意到SQL中行号是从0开始的,因此从第5行开始就是第二页了
因此使用LIMIT 5,5,即方法一:
SELECT * FROM employees LIMIT 5,5;
也可以使用LIMIT m OFFSET n :表示从第n行开始(包括)读取m行,如果不足m行,则读取到表最后停止
该语句等价于 LIMIT n,m;
在SQL Server和Access中可以使用TOP语句,但SQLite不支持。
 方法二:
SELECT * FROM employees
LIMIT 5 OFFSET 5;

2.获取select * from employees对应的执行计划。

explain select * from employees.

可以用 "EXPLAIN" 关键字或 "EXPLAIN QUERY PLAN" 短语,用于描述表的细节,具体说明与用法

3.将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分

不同数据库连接字符串的方法不完全相同,MySQL、SQL Server、Oracle等数据库支持CONCAT方法,而本题所用的SQLite数据库只支持用 连接符号"||"来连接字符串。

SELECT last_name||" "||first_name AS Name FROM employees

4.对于表actor批量插入如下数据,如果数据已经存在,请忽略,不使用replace操作.
对于sqlite3:

insert or ignore into actor

values(3,'ED','CHASE','2006-02-15 12:34:33');

对于mysql:

 

insert IGNORE into actor
values( 3 , 'ED' , 'CHASE' , '2006-02-15 12:34:33' );

insert into:插入数据,如果主键重复,则报错

insert repalce:插入替换数据,如果存在主键或unique数据则替换数据

insert ignore:如果存在数据,则忽略

 
5.针对如下表actor结构创建索引:
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname。
 
  //创建唯一索引 CREATE UNIQUE INDEX uniq_idx_firstname on actor(first_name);
//创建普通索引
CREATE INDEX idx_lastname on actor(last_name);

 6.(网易2018数据分析实习卷)考拉运营"小明"负责多个品牌的销售业绩,请完成:

(1)请统计小明负责的各个品牌,在2017年销售最高的3天,及对应的销售额。
销售表 a:
字段:logday(日期,主键组),SKU_ID(商品SKU,主键组),sale_amt(销售额)
商品基础信息表 b:
字段:SKU_ID(商品SKU,主键),bu_name(商品类目),brand_name(品牌名称),user_name(运营负责人名称)
(2)请统计小明负责的各个品牌,在2017年连续3天增长超过50%的日期,及对应的销售额。

select

 sum(casewhen sat_name ='好评'then count(sat_name) end ) / count(sat_name)  as "好评率"

 from a,b

where a.good_id = b.good_id

and a.user_name ='小明'

and a.sub_time between to_date('2018-1-1','yyyy-mm-dd') and to_date('2018-1-31','yyyy-mm-dd')

and b.bu_name = '母婴'

and b.brand_name ='花王'

 
7.(网易2018数据分析实习卷)好评率是会员对平台评价的重要指标。现在需要统计2018年1月1日到2018年1月31日,用户'小明'提交的母婴类目"花王"品牌的好评率(好评率=“好评”评价量/总评价量):
用户评价详情表:a
字段:id(评价id,主键),create_time(评价创建时间,格式'2017-01-01'), user_name(用户名称),goods_id(商品id,外键) ,
sub_time(评价提交时间,格式'2017-01-01 23:10:32'),sat_name(好评率类型,包含:“好评”、“中评”、“差评”)
商品详情表:b
字段:good_id(商品id,主键),bu_name(商品类目), brand_name(品牌名称)。
1)
select b.brand_name,a.logday,sum(sale_amt) as sale
from a,b
where a.SKU_ID=b.SKU_ID and user_name='小明' and logday between '2017-01-01' and '2017-12-31' group by brand_name,logday having( select count(logday) from ( select b1.brand_name,a1.logday,sum(sale_amt) as sale1
from a a1,b b1
where a1.SKU_ID=b1.SKU_ID and b1.user_name='小明' and a1.logday between '2017-01-01' and '2017-12-31'
group by b1.brand_name,a1.logday ) t where b.brand_name=b1.brand_name and sale1>sale
)<3

(2)第二问比较复杂,所以要创建几个视图

create view t_view as
select brand_name,logday,sum(saleamt) as sale
from a,b
where a.SKU_ID=b.SKU_ID and user_name='小明' and logday in ('2017-01-01','2017-12-31')
group by brand_name,logday; 

create view f_view as
select t1.brand_name,t1.logday,(t1.sale/t2.sale-1) as growth,t1.sale
from t_view t1,t_view t2
where t1.logday-t2.logday=1; 


select distinct f1.brand_name,f1.logday,f1.sale
from f_view f1,f_view f2,f_view f3
where
f1.brand_name=f2.brand_name
and f2.brand_name=f3.brand_name
((f1.logday-f2.logday=-1
and
f1.logday-f3.logday=-2)
or
(f1.logday-f2.logday=1
and
f1.logday-f3.logday=-1)
or
(f1.logday-f2.logday=1
and
f1.logday-f3.logday=2))
and f1.growth>0.5 and f2.growth>0.5
and f3.growth>0.5;

猜你喜欢

转载自www.cnblogs.com/mindyhuang/p/9832558.html