Mysql 在sql中获得每个供应商最畅销的产品
在使用MySql的SQL中,我正在努力解决这个问题: 我必须给出一个产品,该产品主要是由著名的开源数据库NORTHWIND中的每个供应商销售的: 现在我写的是:Mysql 在sql中获得每个供应商最畅销的产品,mysql,sql,northwind,Mysql,Sql,Northwind,在使用MySql的SQL中,我正在努力解决这个问题: 我必须给出一个产品,该产品主要是由著名的开源数据库NORTHWIND中的每个供应商销售的: 现在我写的是: SELECT products.SupplierID ,`order details`.ProductID, count(*) as NumSales FROM `order details` JOIN products ON `order details`.ProductID = products.ProductID
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,因为它在1997年7月售出3次
在开头添加:
SELECT SupplierID, ProductID, MAX(b.NumSales)
FROM( ... )
让我更接近,但它给了我最高的所有供应商,而不是每个供应商
帮助将是巨大的
附言。
类似但相同,对我没有完全帮助。请将此作为一个psuedo答案,并尽可能地使用它…感谢您花时间学习这一点
select supplier_id, max(num_sales) max_sales
from (put your select statement here)
group by supplier_id
这将为您提供每个供应商的最大num_销售额。差不多
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时,您将看到通常有数百个有效的工作脚本可以为您提供所需的答案……您的工作是找到编写最快、运行最有效且符合任务标准的脚本。此处所示方法的优点是,如果tie供应商_id=2有两个产品,且bot的最大销售额为一个,则该方法将显示多个记录。此查询返回这两行
正如附加信息一样…其他数据库允许使用子句使用公共表表达式,但mysql不允许。在其他数据库中,您可以进一步简化此脚本。我感觉这是一项家庭作业,因此仅提供答案是没有用的。我将使用的变体作为我的方法…使用现在的查询来选择max count并将其连接回您的数据以获得其余的列。如果供应商id 1的产品id 1和产品id 2同时销售3,您需要确定当多个产品销售最多时使用的逻辑,您会返回什么?是的,这是家庭作业,但我不觉得不好,如果它不仅仅是问一个答案,而是问一个方法,而且我确实认为这是一个很大的过程。谢谢,我会看的,希望它能帮助我@第十二,使用您现在拥有的查询来选择max count并将其连接回您的数据以获得其余的列-您将其连接回是什么意思?@Tomer-任何查询都可以是子查询**select*from select*from表格a**有效。从复杂子查询中选择*内部联接SametableQueriedInA.id=b.id上的子查询b也是有效的。这可能是因为家庭作业练习,但作为将来的学习提示,不要在表名中包含空格。请使用下划线作为订单详细信息。非常感谢!多亏了你自己的评论,我终于找到了解决办法,但我相信在你的回答中,我能更好地理解SQL,因此我明天会阅读它,如果你真的想做更多的事情,我可能会将它标记为回答…你可以使用这里的逻辑来设计这个脚本的版本,每个供应商只返回一行