面试题

2017-05-11  本文已影响5人  Shaun_lan

一、人人车:

1.设计一个销售表,并给出SQL语句用来统计给定的时间段内,每人每天的销售额和销售总量。

create table sales {

           id int not null auto_increment,

           emp_id int not null,

           sale_time int not null,  # 使用时间戳表示,为了索引查找方便

           total dec(10,2),

          primary key(id),

          key(sale_time,emp_id)

}

--- 思路:

①每人每天的销售额和销售总量?

答:肯定得group by 每天,emp_id进行分组然后count(1),sum(total)就OK了

②核心在于每天怎么表示?

from_unixtime(sale_time,'%Y-%m-%d)

整体思路就是:先表示出每天每个人的记录,作为结果集a ,然后在对结果集a分组获得统计值

-- SQL语句:

假设开始时间戳为start,结束时间戳为end

select a.emp_id,a.time,count(1),sum(a.total) from ( select from_unixtime(sale_time,'%Y-%m-%d)  as time ,emp_id,total from sales where sale_time>=start and sale_time<=end ) as a group by a.time,emp_id oder by null;

-- 那么问题来了?

①每月/年 每人统计,怎么写?

②如果sale_time字段定义为datetime类型该怎么写?(提示:a.可以仿照上面写;b.不使用子查询而是直接在group by中使用year(sale_time),month(sale_time),day(sale_time),emp_id进行分组)

更多的时间函数参考:http://www.cnblogs.com/ggjucheng/p/3352280.html


上一篇 下一篇

猜你喜欢

热点阅读