好吧,我在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。 This question类似但相同,并没有完全帮助我。
答案 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?,您可以进一步简化此脚本。