我使用的查询返回放置了最多订单数量的城市名称。
这就是我所拥有的:
SELECT MAX(o.OrderID) AS [Number of Orders], od.ShipCity
FROM Orders o, [Order Details] od
GROUP BY o.ShipCity
ORDER BY [Number of Orders] DESC
我得到了所有的城市和他们的订单,而不仅仅是一个订单最多的城市。
发生了什么事?
答案 0 :(得分:1)
是的,您的查询存在一些问题。首先,您获得了最大订单ID,这可能是一些自动增量列。这就像卡尔的答案是第一,我的第二,SELECT MAX(答案)来自this_discussion = 2 ....但这并不意味着我有比他更多的答案。
Rnofx5也是对的......你需要告诉你的桌子加入ON的内容,因为它现在正在创建一个笛卡尔积。如果您不确定那是什么,现在接受它是一个可怕的,邪恶的,邪恶的事情,然后在我们修复查询后谷歌。
所以,我们有订单和订单详情。推测订单不包含City,因此我们需要订单详情
SELECT count(o.OrderID),od.ShipCity 来自订单AS o INNER JOIN [订单详情] AS od ON o。{订单和订单详细信息共有的变量} =。{订单和订单详细信息共有的变量} GROUP BY od.ShipCity ORDER BY count(o.OrderID)DESC 限制1;
好的,我们正在加入订单明细订单。为此,我们需要将每个订单与订单明细中的某些内容相关联。我不知道您的架构,但从它的声音可能每个订单在订单详细信息中都有相应的记录。在这种情况下,您使用其ID加入这两个表。像
这样的东西ON o.OrderID = od.OrderID
现在,我们正在计算与特定城市相关的所有订单......我们按照我们的计数按降序对它们进行排序。然后我们只保留第一个返回的记录(LIMIT 1)
根据你的SQL实现,你可能需要TOP 1而不是LIMIT 1.你标记了mysqli,所以这可能是MySQL,在这种情况下你想要LIMIT而不是TOP。但请注意,这可能是您在某些时候遇到的语法变体
答案 1 :(得分:0)
您获得每个船舶城市的最高orderID(MAX),而不是计数。 你需要COUNT(o.OrderID) 在MySQL中,您需要在末尾使用LIMIT 1才能获得最高的结果。