也是最近看到的一个面试题,第二题我还没做出来,如果有大佬路过,求帮助看看
题目如下:
现有SaleInfo存储销售人员日常销售记录 表结构如下
表 UserInfo存储销售人员信息
第一题:统计2018-1-1在库人员销售业绩统计,要求:按照销售金额倒序排序
第二题:查询2018-1 月销售人员每天的销售业绩报表
先把表创建好
SaleInfo表
CREATE TABLE saleinfo(
`UserID` INT COMMENT '销售人员',
`SaleMoney` INT COMMENT '销售金额',
`SaleDateTime` DATE NOT NULL COMMENT '销售日期',
`SaleProductID` INT COMMENT '销售产品ID'
);
INSERT INTO saleinfo(UserID,SaleMoney,SaleDateTime,SaleProductID) VALUES(1,100,'2018-01-01',10001),
(1,150,'2018-01-02',10002),
(2,100,'2018-01-03',10001),
(2,250,'2018-01-01',10003),
(1,300,'2018-01-02',10005),
(3,250,'2018-01-01',10003),
(1,100,'2018-01-01',10004),
(3,100,'2018-01-01',10001);
UserInfo表
CREATE TABLE userInfo(
`ID` INT,
`Name` VARCHAR(20),
`Sex` VARCHAR(2),
`Birthday` DATE NOT NULL
);
INSERT INTO userInfo(`ID`,`Name`,`Sex`,`Birthday`) VALUES(1,'张三','男','1980-01-01'),
(2,'李四','女','1980-01-01'),
(3,'王五','男','1981-01-01'),
(4,'罗六','女','1981-01-01');
第一题我的做法是先用saleinfo表查出用户ID,用户销售的单数和销售的金额,在左连接userInfo表
SELECT u.Name '销售人员姓名',s.dstj '销售单数',s.money '销售金额'
FROM userInfo u LEFT JOIN
(SELECT userID,COUNT(*) dstj,SUM(SaleMoney) money FROM saleinfo WHERE SaleDateTime = '2018-01-01'
GROUP BY UserID ) s
ON u.ID = s.UserID GROUP BY u.ID
ORDER BY money DESC
查出结果是这样
第二题我感觉像竖表转横表,我是这么做的
SELECT u.Name '销售人员',
SUM(CASE s.rq WHEN '2018-01-01' then s.money ELSE 0 END) as '1-1',
SUM(CASE s.rq WHEN '2018-01-02' then s.money ELSE 0 END) as '1-2',
SUM(CASE s.rq WHEN '2018-01-03' then s.money ELSE 0 END) as '1-3'
FROM userinfo u
LEFT JOIN
(SELECT userID,SaleDateTime rq,SUM(SaleMoney) money FROM saleinfo
GROUP BY UserID, SaleDateTime) s
ON u.ID = s.UserID
GROUP BY u.Name
结果是这样
但是我不知道题目中 查了整个月的日期是怎么做到的,希望路过的大佬教教我。