在 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? 在其他数据库中,您可以进一步简化此脚本。
好吧,我在 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? 在其他数据库中,您可以进一步简化此脚本。