这道数据库题目你必须看看,之后的面试还真的会碰到

 前几天后台有看到一位粉丝发了面试题,以及早上看到也有人在问,不知道是不是同一个人,来看看题目吧,粉丝发的是图片的,大家可以看一下。

    大家可能看不清,小编给大家写出来,并附上小编晚上把答案写出来,大家可以看一下,如果写的有错,大家可以留言告诉小编,或者有更优化的答案也是可以留言告诉小编哦,题目是这样的


有几张表如下:

部门表: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;


查询结果:

    以上是小编的解答,如果不对请及时留言指正,感谢大家的支持。


你可能感兴趣的:(数据库,软件测试面试宝典)