我正在尝试从每种类别的油漆中找出最低价和最高价的产品一年中每个季度在每个州的产品。
这是我的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
到目前为止是我的代码
谢谢你。
您可以连接所有相关表(使用standard语法-带有on
关键字),并按产品和季度分组。然后,您可以使用窗口函数对具有相同prod_category
,cust_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