获得最高和最低销售的商品,只需要想法[关闭]

问题描述 投票:-1回答:1

我正在尝试从每种类别的油漆中找出最低价和最高价的产品一年中每个季度在每个州的产品。

这是我的ERD:

“这是我的ERD”

这是到目前为止我可以编写的代码。我的大脑停了下来。如果您可以说连接那些表,对我来说就足够了。我不了解找到销售产品的逻辑。

SELECT max(line.prod_sku) as Prod_SKU, brand_name, prod_category,
       sum(line.line_qty) as highest
from LGLINE line,
     LGPRODUCT prod,
     LGBRAND
where line.prod_sku = prod.prod_sku AND prod.Brand_ID = LGBRAND.Brand_ID
group by Prod_Category

到目前为止是我的代码

谢谢你。

mysql sql join group-by erd
1个回答
1
投票

您可以连接所有相关表(使用standard语法-带有on关键字),并按产品和季度分组。然后,您可以使用窗口函数对具有相同prod_categorycust_state和四分之一的组内的记录进行排名(这需要MySQL 8.0):

select *
fom (
    select
        p.prod_sku,
        b.brand_name,
        p.prod_category,
        c.cust_state,
        year(i.inv_date) yr,
        quarter(i.inv_date) qr,
        sum(l.prod_qty) sum_qty,
        rank() over(
            partition by p.prod_category, c.cust_state, year(i.inv_date), quarter(i.inv_date)
            order by sum(l.prod_qty) 
        ) rn_asc,
        rank() over(
            partition by p.prod_category, c.cust_state, year(i.inv_date), quarter(i.inv_date)
            order by sum(l.prod_qty) desc
        ) rn_desc
    from lgproduct p
    inner join lgline     l on l.prod_sku  = p.prod_sku
    inner join lginvoice  i on i.inv_num   = l.inv_num
    inner join lgcustomer c on c.cust_code = i.cust_code
    inner join lgbrand    b on b.brand_id  = p.brand_id
    group by
        p.prod_sku,
        b.brand_name,
        p.prod_category,
        c.cust_state,
        year(i.inv_date) yr,
        quarter(i.inv_date) qr,
) t
where rn_asc = 1 or rn_desc = 1
order by prod_category, cust_state, yr ,qr, sum_qty desc
© www.soinside.com 2019 - 2024. All rights reserved.