mysql横竖表查询

也是最近看到的一个面试题,第二题我还没做出来,如果有大佬路过,求帮助看看
题目如下:
现有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

结果是这样
在这里插入图片描述
但是我不知道题目中 查了整个月的日期是怎么做到的,希望路过的大佬教教我。
表情包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值