中级HQL题7(某年销量问题)

2.7.1 题目需求

从订单明细表(order_detail)中筛选出去年总销量小于100的商品及其销量,假设今天的日期是2022-01-10,不考虑上架时间小于一个月的商品,期望结果如下:

1、查询order_detail表与sku_info表

.

2、分析题目并编写代码

题目信息中日期精确到年,因此立马想到year(日期)函数。有要求不考虑上架不足一月的商品,直觉告诉我们应该是个差值,如何计算这个时间差值?要用到datediff(时间1,时间2)函数。

--1 查询出21年销量小于100的商品

select sku_id,
       year(create_date) year,
       sum(sku_num)      sum_num
from order_detail od
where year(create_date) = year(`current_date`())-2
group by sku_id, year(create_date)
having sum_num < 100;

其中的current_date(无参) 函数表示,获得当前日期。year(`current_date`())-2 表示获取2021年这个年份。

 查询结果如下:

--2 join连接sku_info表,查询出商品的名称,并利用from_date与'2022-01-10'的日期差——>datediff(时间1,时间2)函数解决。

select si.sku_id,
       name,
       sum_num
from (select sku_id,
             year(create_date) year,
             sum(sku_num)      sum_num
      from order_detail od
      where year(create_date) = year(`current_date`())-2
      group by sku_id, year(create_date)
      having sum_num < 100) t1
         join sku_info si
              on si.sku_id = t1.sku_id
where datediff('2022-01-10',from_date) >= 30;

 查询结果如下:

 完美!

总结:

上架日期参与的计算:就利用datediff()函数相减。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值