问题-显示在销售员Marshall处理的订单中购买的产品的产品ID,名称和清单价格,且其清单价格大于每个类别的所有平均清单价格。按ID升序对输出进行排序。
我的当前查询-
SELECT p.product_id, p.product_name, p.list_price
FROM products p
full outer JOIN inventories i
on i.product_id = p.product_id
full outer JOIN warehouses w
on w.warehouse_id=i.warehouse_id
full outer JOIN department d
on d.location_id = w.location_id
full outer JOIN employees e
on e.manager_id = d.manager_id
WHERE UPPER(e.last_name) = 'MARSHALL';
结果- null null null
预期结果
ProdId Product Name LPrice
2 Intel something 9999.99
其他信息
我使用查询时
SELECT first_name, last_name
FROM EMPLOYEES
WHERE UPPER(last_name) = 'MARSHALL';
我得到了伊莎贝尔·马歇尔
因此,我加入了所有表,但我认为我应该使用子查询,但不确定如何处理它。
答案 0 :(得分:0)
您不想在这里使用完全外部联接。 您的问题是有关某位销售员在哪里购买产品的订单,但您的查询是从产品中加入的,以查找哪些仓库拥有该仓库,然后谁的经理与该仓库是同一经理-它没有回答问题
我将从将产品加入涉及它们的订单开始(猜测您表之间的关系):
select p.product_id, p.product_name, p.list_price
from products p
join order_items oi
on p.product_id = oi.product_id
join orders o
on oi.order_id = o.order_id
订单中的一行有一个salesman_id,我的第一个猜测是它链接到salesman_id = employee_id上的员工,但实际上可能存在其他条件,或者您可能需要使用employee表。这是您的数据,因此您应该查看自己的数据模型并测试一些查询以找出它们如何组合在一起。
如果我们认为我的猜测是正确的,则只需加入并过滤即可获得需求的第一部分:
select p.product_id, p.product_name, p.list_price
from products p
join order_items oi
on p.product_id = oi.product_id
join orders o
on oi.order_id = o.order_id
join employees e
on o.salesman_id = e.employee_id
where e.last_name = 'Marshall'
下一步是过滤列表价格大于每个类别的所有平均列表价格的位置。因此,您可以先获取每个类别的平均标价:
select category_id, avg(list_price) avg_list_price
from products
group by category_id
然后您可以将其加入到主查询中(在category_id中将是唯一的),并添加一个包含平均标价的过滤器。
select p.product_id, p.product_name, p.list_price
from products p
join order_items oi
on p.product_id = oi.product_id
join orders o
on oi.order_id = o.order_id
join employees e
on o.salesman_id = e.employee_id
join (select category_id, avg(list_price) avg_list_price
from products
group by category_id
) c
on p.category_id = c.category_id
where e.last_name = 'Marshall'
and p.list_price > c.avg_list_price
order by p.product_id
我也通过ID升序来添加订单(假设它指的是product_id)。假设我对您的数据模型的猜测是正确的,那么我们就完成了! (我还假设它并不是真正指的是order_items中出现的单位销售价格,但是如果需要的话,应该很容易更改它。)