【发布时间】:2020-12-24 01:07:02
【问题描述】:
我需要找到1996年下单最多的customerID。我写了如下语句:
SELECT count(orderID) as orderNumber
, CustomerID
, OrderDate
FROM Orders
where OrderDate between "1996-01-01" AND "1996-12-31"
group
by CustomerID
order
by orderNumber DESC ;
我的问题是我只想打印最上面的客户 ID,即 65、63、20,但我不知道怎么写。 我想我应该在这里使用 max 来过滤已经发起 6 个订单的 customerID。 我说的对吗?
【问题讨论】:
-
您应该首先根据什么标准定义顶级cistoner,并告诉我们如何获取这些信息
-
您的查询无效。你想显示哪个
OrderDate?客户的第一个还是他们的最后一个?决定然后应用适当的功能,例如MAX(OrderDate)或者根本不显示日期。如果您只想显示数量最多的客户,请在ORDER BY子句之后使用LIMIT 1。 -
@ThorstenKettner。我的查询是有效的。我想过滤 1996 年的所有订单。订单日期与客户发起订单的日期匹配。所以一个customerId 可以有多个orderId 和orderDate。这是问题所在。有三个 customerIds 发起了相同的最大订单。如果我使用 LIMIT 1,它只返回一个 customerIds
-
否,查询无效。客户 65 下了 6 个订单,您显示日期为 '1996-07-22'。那么,您看到它保证当天所有六个订单都下达了吗?你的桌子能保证吗? MySQL 应该在此处引发错误,并且它可能并不表示您正在运行旧版本。如前所述,要使查询有效,您必须从 select 子句中删除日期或对其应用聚合函数。
标签: mysql sql count sql-order-by window-functions