前几天后台有看到一位粉丝发了面试题,以及早上看到也有人在问,不知道是不是同一个人,来看看题目吧,粉丝发的是图片的,大家可以看一下。
大家可能看不清,小编给大家写出来,并附上小编晚上把答案写出来,大家可以看一下,如果写的有错,大家可以留言告诉小编,或者有更优化的答案也是可以留言告诉小编哦,题目是这样的。
有几张表如下:
部门表:organization(orgid,orgName)
商品表:Goods(goodsid,goodsName)
销售单(单头):sale(billid,billdt,orgid,status)
销售单(单体):sale_item(billd,goodsid,qty,price)
(字段含义:orgld 组织编码,orgName 组织名称,goodsld 商品编码,goodsName 商品名称,billid单据编号,billdt单据日期,status 单据状态(1生效,2作废),qty数量 ,price 价格)(小编按图片码字的,如有错误以图片为准)
请实现如下业务场景的SQL语句:
(1)查询“销售一部”本月的商品销售明细(商品编码,商品名称,销售单号。销售日期,销售数量)
小编解答:
SELECT si.goodsid as '商品编码',g.goodsName as '商品名称',si.billid as '销售单号',s.billdt as '销售日期',si.qty as '销售数量'
from sale_item si LEFT join sale s on si.billid=s.billid
LEFT JOIN goods g on si.goodsid=g.goodsid
where s.orgid=1 and date_format(s.billdt,'%Y%m') = date_format(curdate() ,'%Y%m');
查询结果:(数据为小编添加)
(2)统计2015-11-01到2015-11-05时间段内各个部门的商品销量排名(部门编码,部门名称,销售额)
小编解答:
SELECT s.orgid as '部门编码',o.orgName as '部门名称',si.price*si.qty as '销售额' from sale s LEFT JOIN org o on s.orgid=o.orgid LEFT JOIN
sale_item si on s.billid=si.billid where s.billdt BETWEEN '2015-11-01' and '2015-11-05 23:59:59' ORDER BY si.qty DESC;
查询结果:
(3)查询销售部门(名称以“销售”开头)以外的其它各部门的销售单列表(部门名称,单据号,单据日期,销售额),按照部门名称,单据日期升序排序。
小编解答:
SELECT o.orgName as '部门名称',s.billid as '单据名称',s.billdt as '单据日期',(si.qty*si.price) as '销售额'
from sale s LEFT JOIN sale_item si on s.billid=si.billid LEFT JOIN org o on s.orgid=o.orgid where o.orgName NOT LIKE '销售%' ORDER BY s.billdt ASC;
查询结果:
以上是小编的解答,如果不对请及时留言指正,感谢大家的支持。