題目需求
商家要求每個(gè)商品每個(gè)月需要售賣出一定的銷售總額
假設(shè)1號(hào)商品銷售總額大于21000,2號(hào)商品銷售總額大于10000,其余商品沒有要求
請(qǐng)寫出SQL從訂單詳情表中(order_detail)查詢連續(xù)兩個(gè)月銷售總額大于等于任務(wù)總額的商品
期望結(jié)果如下:
sku_id (商品id) |
---|
1 |
需要用到的表:
訂單明細(xì)表:order_detail
order_detail_id(訂單明細(xì)id) | order_id(訂單id) | sku_id(商品id) | create_date(下單日期) | price(商品單價(jià)) | sku_num(商品件數(shù)) |
---|---|---|---|---|---|
1 | 1 | 1 | 2021-09-30 | 2000.00 | 2 |
2 | 1 | 3 | 2021-09-30 | 5000.00 | 5 |
… | … | … | … | … | … |
存在的疑問
文章來源:http://www.zghlxwxcb.cn/news/detail-524120.html
實(shí)現(xiàn)一
-- 實(shí)現(xiàn)1-1 : 2)、3) 較難理解 --> 請(qǐng)看實(shí)現(xiàn)1-2
select sku_id
from (
-- 4) 選擇出 (create_date_for 與 create_date_for_last 相差一個(gè)月) 的記錄
select sku_id,
sum_price,
sum_price_last,
-- 5) 判斷是否連續(xù)兩個(gè)月的銷售總額是否達(dá)到要求。1: 達(dá)到; 0: 未達(dá)到。
case
when sku_id = 1 and sum_price >= 21000 and sum_price_last >= 21000 then 1
when sku_id = 2 and sum_price >= 10000 and sum_price_last >= 10000 then 1
else 0
end as whether_ok
from (
-- 1) 統(tǒng)計(jì) 1號(hào) 2號(hào) 商品每個(gè)月的銷售總額
select sku_id,
date_format(create_date, 'yyyy-MM') create_date_for,
sum(price) sum_price,
-- 2) 獲取下一次銷售月份, 如果為null,則默認(rèn)使用 '9999-99'
lead(date_format(create_date, 'yyyy-MM'), 1, '9999-99')
over (partition by sku_id order by date_format(create_date, 'yyyy-MM')) as create_date_for_last,
-- 3) 獲取下一次銷售月份的銷售總額, 如果為null,則默認(rèn)使用 0
-- 注: 此處的 sum(price) 是計(jì)算的下一組的 銷售總額
lead(sum(price), 1, 0.00)
over (partition by sku_id order by date_format(create_date, 'yyyy-MM')) as sum_price_last
from order_detail
where sku_id in (1, 2)
-- 這里 date_format(create_date, 'yyyy-MM') 被視為一個(gè)整體
group by sku_id, date_format(create_date, 'yyyy-MM')
) t1
where datediff(concat(create_date_for_last, '-01'), concat(create_date_for, '-01')) <= 31
) t2
where whether_ok = 1;
-- 實(shí)現(xiàn)1-2
select sku_id
from (
-- 4) 選擇出 (create_date_for 與 create_date_for_last 相差一個(gè)月) 的記錄
select sku_id,
sum_price,
sum_price_last,
-- 5) 判斷是否連續(xù)兩個(gè)月的銷售總額是否達(dá)到要求。1: 達(dá)到; 0: 未達(dá)到。
case
when sku_id = 1 and sum_price >= 21000 and sum_price_last >= 21000 then 1
when sku_id = 2 and sum_price >= 10000 and sum_price_last >= 10000 then 1
else 0
end as whether_ok
from (
select sku_id,
create_date_for,
sum_price,
-- 2) 獲取下一次銷售月份, 如果為null,則默認(rèn)使用 '9999-99'
lead(create_date_for, 1, '9999-99')
over (partition by sku_id order by create_date_for) as create_date_for_last,
-- 3) 獲取下一次銷售月份的銷售總額, 如果為null,則默認(rèn)使用 0
lead(sum_price, 1, 0.00) over (partition by sku_id order by create_date_for) as sum_price_last
from (
-- 1) 統(tǒng)計(jì) 1號(hào) 2號(hào) 商品每個(gè)月的銷售總額
select sku_id,
date_format(create_date, 'yyyy-MM') create_date_for,
sum(price) sum_price
from order_detail
where sku_id in (1, 2)
-- 這里 date_format(create_date, 'yyyy-MM') 被視為一個(gè)整體
group by sku_id, date_format(create_date, 'yyyy-MM')
) t1
) t2
where datediff(concat(create_date_for_last, '-01'), concat(create_date_for, '-01')) <= 31
) t3
where whether_ok = 1;
題目來源
http://practice.atguigu.cn/#/question/23/desc?qType=SQL文章來源地址http://www.zghlxwxcb.cn/news/detail-524120.html
到了這里,關(guān)于23. 銷售額完成任務(wù)指標(biāo)的商品的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!