某超市的商品管理系统,有以下三张表,请根据要求作答。
(说明:商品表(csb_sp)是拉链表,以起始日期(qsrq)、结束日期(jsrq)按日期区间记录销售单价的变化。)
1、查询2021年初以来,所有商品的销售单价变化情况,展示信息:商品名称、商品类型、商品单位、起始日期、结束日期、商品单价。
2、查询2021年初以来所有商品的入库情况,展示信息:商品名称、商品类型、入库总量、入库次数、购入支出总金额。并按入库总量降序排列。
3、查询2021年3月份商品交易情况,展示信息:商品名称、商品类型、交易总量、交易总金额。按交易金额降序排列。
4、查询一季度现金支付交易量和非现金支付交易情况,展示信息:月份、现金付款次数、非现金付款次数、现金付款交易金额占比。按月份升序排列。
5、查询年初以来日均销售量达到100或者日均销售额达到3000元的商品,展示信息:商品名称、商品类型、日均销售数量、日均销售额。
这些问题应该涉及的都是比较基础的sql知识,不必想的太复杂。
具体的代码:
-- 问题1
select spmc,splx,spdw,qsrq,jsrq,xsdj from csb_sp where qsrq >= '2021-01-1' ;
-- 问题2
select b.spmc,b.splx,sum(a.rksl) as rkzl,count(a.spbh) as rkcs,sum(a.grdj) as zczje from sp_rkjl a
left join csb_sp b on a.spbh = b.spbh
where rkrq >= '2021-01-1'
group by b.spmc,b.splx order by sum(a.rksl) desc ;
-- 问题3 这个需要考虑单价变动的情况
select b.spmc,b.splx,sum(jysl) as jyzl,sum(a.jysl*b.xsdj) as jyzje from sp_jyjl a
left join csb_sp b on a.spbh = b.spbh and a.jyrq between b.qsrq and b.jsrq
where a.jyrq between '2021-03-01' and '2021-03-31'
group by b.spmc,b.splx order by sum(a.jysl*b.xsdj) desc
-- 问题4
select right(date_format(jyrq, '%Y%m'),2),sum(case when fkfs = 0 then 1 else 0 end ) xjcs
,sum(fkfs) as fxjfkcs --基于fkfs这个字段是int类型的写法
,sum(case when fkfs = 0 then a.jysl*b.xsdj else 0 end )/sum(a.jysl*b.xsdj) xjfrjyjezb
from sp_jyjl a
left join csb_sp b on a.spbh = b.spbh and a.jyrq between b.qsrq and b.jsrq
where right(date_format(jyrq, '%Y%m'),2) between '01' and '03'
group by right(date_format(jyrq, '%Y%m'),2) order by right(date_format(jyrq, '%Y%m'),2)
-- 问题5
select t1.spmc,t1.splx,avg(jyzl) ,avg(jyzje ) from (
select a.jyrq,b.spmc,b.splx,sum(jysl) as jyzl,sum(a.jysl*b.xsdj) as jyzje from sp_jyjl a
left join csb_sp b on a.spbh = b.spbh and a.jyrq between b.qsrq and b.jsrq
where a.jyrq >= '2021-01-01'
group by b.spmc,b.splx ,a.jyrq ) t1
group by t1.spmc,t1.splx having avg(jyzl) >=100 or avg(jyzje )>=3000
由于没有数据内容和表结构可以参考,所写内容均需后续验证,如有问题,请直接联系。
select spmc,splx,spdw,qsrq,jsrq,xsdj from csb_sp where qsrq between '2021-01-1' and '2021-12-31'
第三个问题是不是表设计有问题,交易总金额?你的表里都没有交易金额,你的只有交易数量。