#开始我想使用and year(s.sale_month)=2023 and month(s.sale_month)<7作为条件筛选的,但是函数的返回结果一直是NULL,添加了str_to_date(s.sale_month, "%Y-%m")之后还是不行,也不知道为什么,就直接看讨论里面的用between...and了

with window_tb as (
    select
        p.product_id,
        quantity,
        row_number() over(partition by product_name order by quantity desc) as max_ranking,
        row_number() over(partition by product_name order by quantity) as min_ranking
    from
        products_underline as p
        left join sales_underline as s on p.product_id=s.product_id and sale_month between "2024-01" and "2024-06"
)

select
    product_id,
    product_name,
    (
        select sum(quantity) 
        from sales_underline as s
        where s.product_id=p.product_id and sale_month between "2024-01" and "2024-06"
    ) as total_sales,
    (
        select quantity
        from window_tb
        where window_tb.product_id=p.product_id and window_tb.max_ranking=1
    ) as max_monthly_sales,
    (
        select quantity
        from window_tb
        where window_tb.product_id=p.product_id and window_tb.min_ranking=1
    ) as min_monthly_sales,
    (
        select convert(avg(quantity), signed) 
        from sales_underline as s
        where s.product_id=p.product_id and sale_month between "2024-01" and "2024-06"
    ) as avg_monthly_sales
from products_underline as p
order by product_id