MySql 分组

标签 mysql x-cart

我正在尝试找出运行此查询的最佳方式。我基本上需要返回在我们的系统中只下了一个订单的客户的“登录”字段列表(登录字段基本上是客户 ID/ key )。

我们系统的一些背景......

客户在同一日期下的多个订单等同于一个订单。原因是我们有多个供应商,每当有人订购时,我们的购物车系统会将单个订单拆分为多个订单 - 该订单中每个唯一供应商 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 个订单,而其他登录有多个订单。我希望这是有道理的 - 如果您有任何问题,请告诉我

使用 Having 的重要注意事项

我被推荐使用:

HAVING c1 = 1

不幸的是,Having 不起作用 - 原因是因为 c1 可以大于 1 才能使情况为真。请记住,它在结果中给出了每天的订单计数 - 因此 - 如果有人在同一天向 3 个供应商下了 1 个订单,那一天将产生 3 个订单 - 但是 - 那是他们的一个订单placed - 使用 HAVING 可以排除这些类型的人

这就是为什么我需要对结果集进行分组然后对其进行计数的原因 - 例如,我将通过登录字段对结果集执行另一组,然后在登录时进行计数 - 任何在此计数上返回 1 的记录都是准确 - 问题是我不确定如何在此结果集上进行分组

最佳答案

您可以使用另一个 SELECT(在您的原始 SELECT 之外)来做到这一点,如下所示:

SELECT login, c1, d1, count(login) as c2 
FROM (...YOUR SELECT...) as orig
GROUP BY login
HAVING c2 = 1

这将按登录名对您的原始 SELECT 进行分组,然后仅显示那些只出现一次的登录名,因此仅显示那些只在一天内购物的用户。

关于MySql 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10806195/

相关文章:

SSL/HTTPS 和 XCart - 安装/设置

php - Mysql插入数据如果不存在否则显示警告

mysql - MySQL如何处理一张表中的数据并将其插入到另一张表中?

mysql - 从结果集中删除可能包含相同电子邮件地址的行

php - 存在类时获取 X-Cart 错误代码 2(缺少类)

javascript - 购物车 : Using ajax calls in template - 403 Forbidden Error

php - json_encode() UTF-8 错误

mysql - 在 Linux Mint 18 上使用 MySQL Workbench

mysql - 我需要从 mysql 表中获取所有唯一数据并将其放入新表中