Mysql 分组
我正在试图找出运行此查询的最佳方法。我基本上需要返回在我们的系统中只下过一次订单的客户的“登录”字段列表(登录字段基本上是客户id/密钥) 我们系统的一些背景…Mysql 分组,mysql,x-cart,Mysql,X Cart,我正在试图找出运行此查询的最佳方法。我基本上需要返回在我们的系统中只下过一次订单的客户的“登录”字段列表(登录字段基本上是客户id/密钥) 我们系统的一些背景… 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 客户在同一日期下的多
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
客户在同一日期下的多个订单等于一个订单。原因是我们有多个供应商,任何时候有人订购我们的购物车系统都会将单个订单拆分为多个订单-每个订单中的唯一供应商有一个订单
这是我到目前为止提出的基本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
这是一个很好的客户列表,每个日期的唯一订单数量
问题是-现在我需要对这个结果集进行分组,并且只返回在这个结果集中有1条唯一记录的客户-我不太确定如何做到这一点
因此,如果您看到上面的示例结果集-我需要从登录列表中返回01crouse-因为该登录只有一条记录,一个订单,而其他登录有多个订单。我希望这是有意义的-如果你有任何问题,请让我知道
使用have的重要注意事项
建议我使用:
HAVING c1 = 1
不幸的是,拥有将不起作用-原因是c1可以大于1,这样情况才是真的。记住,它在结果中每天给我一个订单计数-因此-如果有人在同一天向3个供应商下了1个订单,那么这一天将产生3个订单-但是-这是他们下的一个订单-这些类型的人将被排除在外,使用have 这就是为什么我需要对结果集进行分组,然后对结果集进行计数-例如,我将通过登录字段对结果集执行另一个分组,然后在登录时进行计数-任何在此计数中返回1的记录都是准确的-问题是我不确定如何在此结果集上进行分组请参阅。您已经按照登录名进行分组,因此您应该能够简单地添加
HAVING COUNT(login)=1
如果查询变得更复杂,您始终可以将此查询嵌套在另一个查询中,并执行另一个分组,但这样做时不会保证性能良好。您可以使用另一个SELECT(原始SELECT之外)执行此操作,如下所示:
SELECT login, c1, d1, count(login) as c2
FROM (...YOUR SELECT...) as orig
GROUP BY login
HAVING c2 = 1
这将按登录名对您的原始选择进行分组,然后仅显示其中仅显示一次的登录名,因此仅显示那些仅在一天内购物的用户。不幸的是,拥有将不起作用-原因是c1可以大于1,以使案例为真。记得,它在结果中给了我每天的订单数量-因此-如果有人在同一天向3个供应商下了1个订单,那么这一天将产生3个订单-然而-这是他们下的一个订单-这些类型的人将被排除在使用Having之外如果您向我们展示您的预期产量,那么可能会有所帮助,根据我对你问题的解释,你需要的是什么,但我不能正确理解