Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在sql中获得每个供应商最畅销的产品_Mysql_Sql_Northwind - Fatal编程技术网

Mysql 在sql中获得每个供应商最畅销的产品

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

在使用MySql的SQL中,我正在努力解决这个问题:

我必须给出一个产品,该产品主要是由著名的开源数据库NORTHWIND中的每个供应商销售的:

现在我写的是:

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,因此我明天会阅读它,如果你真的想做更多的事情,我可能会将它标记为回答…你可以使用这里的逻辑来设计这个脚本的版本,每个供应商只返回一行