当我只需要一个时,我得到了太多的解决方案

时间:2014-04-06 01:32:27

标签: sql mysqli

我使用的查询返回放置了最多订单数量的城市名称。

这就是我所拥有的:

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

我得到了所有的城市和他们的订单,而不仅仅是一个订单最多的城市。

发生了什么事?

2 个答案:

答案 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才能获得最高的结果。