在 sql 中获得每个供应商销量最高的产品

Getting the most sold product per supplier in sql

好吧,我在 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
    ;

结果是:

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

添加到开头:

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

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

帮助很大。

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

请知道这是一个伪答案,并按照您的意愿使用它...感谢您花时间学习这个。

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 有两个产品,机器人的最大销售额为一个。此查询 returns 这两行) .

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