根据选择的年份统计出该年下每个月的订单总数、已付订单数量、月销量(帆软软件查询数据)

#ds1数据集sql :  
select strftime('%Y-%m',订购日期) as 日期,strftime('%Y',订购日期) as 年份,
	count(订单.订单ID) as 订单数量,
	sum(case when 是否已付="true" then 1 else 0 end) as 已付订单数量, 
	sum(单价*数量) as 月销量 
from 订单 join 订单明细 on 订单.订单ID=订单明细.订单ID  
where 1=1 ${if(len(年份) == 0,"","and strftime('%Y',订购日期) = '" + 年份 + "'")} 
group by 2,1 order by 1

公式解析:

1. strftime(’%Y-%m’,订购日期):

提取订购日期中的年份月份并用“-”隔开,即 从2011-01-11 提取 2011-01

2. sum(case when 是否已付=“true” then 1 else 0 end):

判断语句统计已付订单的数量

3. where 1=1 ${if(len(年份) == 0, “”, “and strftime(’%Y’,订购日期) = '” + 年份 + “’”)}:

(1)where 1=1: 1=1 永远成立,可以确保where后的语句不会报错,where之前的语句始终执行
(2)${if(len(年份) == 0, “”, “and strftime(’%Y’,订购日期) = '” + 年份 + “’”)}

1、加入if(len(年份) == 0,的判断是为了无年份参数值输入时可以显示全部年份所有的信息,即

select strftime('%Y-%m',订购日期) as 日期,strftime('%Y',订购日期) as 年份,
	count(订单.订单ID) as 订单数量,
	sum(case when 是否已付="true" then 1 else 0 end) as 已付订单数量, 
	sum(单价*数量) as 月销量 
from 订单 join 订单明细 on 订单.订单ID=订单明细.订单ID  
where 1=1  
group by 2,1 order by 1

2、如果年份的字段长度不为 0 ,那么执行的语句是

select strftime('%Y-%m',订购日期) as 日期,strftime('%Y',订购日期) as 年份,
	count(订单.订单ID) as 订单数量,
	sum(case when 是否已付="true" then 1 else 0 end) as 已付订单数量, 
	sum(单价*数量) as 月销量 
from 订单 join 订单明细 on 订单.订单ID=订单明细.订单ID  
where 1=1  and strftime('%Y',订购日期) =  ${"'" +年份 + "'"} 
group by 2,1 order by 1

年份作为参数,将该参数获取到的值与数据库中的订购日期(年)比较作为筛选条件;
$a

4、输入参数值年份时,输入的是数字ex:2011,2010等,但在数据库中订购日期是字符串类型的,所以将参数传递的值转换成字符串类型,ex:‘2011’,‘2010’

在这里插入图片描述


4. group by 2,1 order by 1:
(1)group by 2,1:

2,1指的是select后的字段,即年份和日期;通过年份和日期进行分组在这里插入图片描述

(2)order by 1:

即通过日期进行排序


表格效果图如下:

在这里插入图片描述

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值