在sql中获得每个供应商销售最多的产品

时间:2018-03-26 18:54:57

标签: mysql sql northwind

好吧,我在SQL中使用MySql来解决这个问题:

我必须从名为NORTHWIND的流行开源数据库中提供每个供应商主要销售的产品:https://northwinddatabase.codeplex.com

现在我写的是:

SELECT  products.SupplierID ,`order details`.ProductID, count(*) as NumSales FROM `order details` 
    JOIN products ON `order details`.ProductID = products.ProductID
    JOIN orders ON `order details`.OrderID = orders.OrderID
    WHERE `order details`.OrderID 
        IN
        (SELECT OrderID FROM orders 
           WHERE MONTH(OrderDate) = 7 AND YEAR(orderDate) = 1997) 


    group by products.SupplierID  , `order details`.ProductID 
    ORDER BY NumSales desc
    ;

结果是:

result

这一切都很好,但我需要回馈供应商1产品1,因为它已售出3次(7/1997)

添加到开头:

SELECT SupplierID, ProductID, MAX(b.NumSales)
FROM( ... )

让我更接近但是它给了我所有供应商中最高的而不是每个供应商。

帮助会很棒。

P.S。 This question类似但相同,并没有完全帮助我。

1 个答案:

答案 0 :(得分:1)

请知道这是一个假的答案并与之合作,因为您将...感谢您花时间学习这一点。

select supplier_id, max(num_sales) max_sales
from (put your select statement here)
group by supplier_id

现在,您可以获得每个供应商的最大num_sales数。像

这样的东西
supplier_id    max_sales
1              3
2              1
3              2
4              2

现在将此连接回原始查询,以获取与最大匹配项匹配的产品数据

select a.supplier_id, b.product_id, a.max_sales 
from
(select supplier_id, max(num_sales) max_sales
from (put your select statement here)
group by supplier_id) a
inner join 
(your original query again) b
on a.supplier_id = b.supplier_id
and a.max_sales = b.num_sales

在学习SQL时,您会看到通常有数百个有效的工作脚本可以为您提供所需的答案....您的工作就是找到编写速度最快的脚本,最有效的方法是运行,并符合您的任务标准。这里显示的方法的优点是,如果出现平局,它将显示多个记录(supplier_id = 2有两个产品,机器人的最大销售额为1。此查询返回这两个行)。

就像附加信息一样......其他数据库允许使用公用表表达式(带子句),但是mysql没有。在其他数据库中How do you use the "WITH" clause in MySQL?,您可以进一步简化此脚本。