我正在尝试找出运行此查询的最佳方法。我基本上需要返回在我们系统中只下过一个订单的客户的“登录”字段列表(登录字段基本上是客户 ID/密钥)。
我们系统的一些背景...
客户在同一日期下的多个订单是一个订单的等价物。原因是我们有多个供应商,任何时候有人订购我们的购物车系统都会将该单个订单拆分为多个订单 - 该订单中每个唯一供应商的 1 个订单。
这是我到目前为止提出的基本mysql查询..
SELECT
xcart_orders.login,
COUNT(xcart_orders.login) as c1,
FROM_UNIXTIME(xcart_orders.date, '%Y-%m-%d') as d1
FROM
xcart_orders
WHERE
INSTR(xcart_orders.email, "marketplace") <= 0
GROUP BY
xcart_orders.login,
FROM_UNIXTIME(xcart_orders.date, '%Y-%m-%d')
ORDER BY
xcart_orders.login
ASC
这是返回的数据示例...
login c1 d1
01crouse 1 2007-11-30
022336010 2 2009-06-24
022336010 1 2009-08-28
02emzach 1 2011-08-25
02emzach 1 2011-10-18
这给我返回了一个很好的客户列表,每个日期的唯一订单数
问题是 - 现在我需要对这个结果集进行分组,并且只返回在这个结果集中有 1 条唯一记录的客户 - 我不太确定该怎么做
因此,如果您看到上面的示例结果集——我需要从登录列表中返回 01crouse——因为该登录只有 1 条记录,1 个订单,而其他登录有多个订单。我希望这是有道理的 - 如果您有任何问题,请告诉我
使用 Have 的重要说明
我被推荐使用:
HAVING c1 = 1
不幸的是,Have 不起作用——原因是因为 c1 可以大于 1 才能使情况成立。请记住,它在结果中每天给我一个订单计数 - 因此 - 如果有人在同一天向该订单中的 3 个供应商下 1 个订单,那将导致该天有 3 个订单 - 但是 - 这是他们的一个订单放置 - 这些类型的人将通过使用 HAVING 被排除在外
这就是为什么我需要对结果集进行分组然后对结果集进行计数的原因-例如,我将通过登录字段对结果集执行另一个组,然后对登录进行计数-在此计数上返回 1 的任何记录都是准确的-问题是我不确定如何对这个结果集进行分组