Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-查找长期以来老客户与新客户的订单_Mysql_Sql - Fatal编程技术网

MySQL-查找长期以来老客户与新客户的订单

MySQL-查找长期以来老客户与新客户的订单,mysql,sql,Mysql,Sql,我有一个订单表,其中包含订单id、客户电子邮件地址和购买日期。我想编写一个SQL查询,该查询将为表中的每一行添加一个名为“repeat\u order\u count”的新字段,该字段显示该客户之前订购了多少次,包括该订单 例如,如果John在此订单之前订购了一次,则此订单的重复订单计数将为2,或者换句话说,这是John第二次订购。我为John遇到的下一个订单行将有一个3,依此类推。这将允许我创建一个折线图,显示一段时间内回头客下的订单数量。我现在可以转到过去的某个特定时间,计算出在该时间段内回

我有一个订单表,其中包含订单id、客户电子邮件地址和购买日期。我想编写一个SQL查询,该查询将为表中的每一行添加一个名为“repeat\u order\u count”的新字段,该字段显示该客户之前订购了多少次,包括该订单

例如,如果John在此订单之前订购了一次,则此订单的重复订单计数将为2,或者换句话说,这是John第二次订购。我为John遇到的下一个订单行将有一个3,依此类推。这将允许我创建一个折线图,显示一段时间内回头客下的订单数量。我现在可以转到过去的某个特定时间,计算出在该时间段内回头客下了多少订单:

SELECT 
      * 
FROM orders 
WHERE repeat_order_count > 1 
WHERE date_purchased = January 2014 --(simplifying things here) 
我现在还能够确定客户何时成为回头客


我想不出解决这个问题的方法。或者可能有一种更简单的方法可以做到这一点?

当您插入到orders表中时,对于您的
OrderCount
的列,您使用一个相关联的子查询。 例如:


请注意,在处理第二份订单时,您不会添加该字段,该字段将已经存在,您只需填充它。

当您插入订单表时,对于您的
OrderCount
列,您使用一个相关子查询。 例如:


请注意,在处理第二份订单时,您不会添加该字段,该字段将已经存在,您只需填充它。

当您插入订单表时,对于您的
OrderCount
列,您使用一个相关子查询。 例如:


请注意,在处理第二份订单时,您不会添加该字段,该字段将已经存在,您只需填充它。

当您插入订单表时,对于您的
OrderCount
列,您使用一个相关子查询。 例如:


请注意,在处理第二个订单时,您不会添加字段,该字段已经存在,您只需填充它。

检索指定结果的一种方法是在选择列表中使用相关子查询。这假设客户标识符是
客户\u电子邮件\u地址
购买日期
日期时间
时间戳
(或其他规范格式),并且同一客户没有重复的值(也就是说,客户没有两个或多个具有相同购买日期值的订单。)

有了这个索引,我们希望
EXPLAIN
能够显示外部查询使用的索引,满足
ORDER by
(在
Extra
列中没有“usingfilesort”),并作为覆盖索引(在
Extra
列中没有对底层表中的页面进行查找,“usingindex”)

我给出的答案只演示了一种方法。也可以使用连接模式返回等效结果,例如:

SELECT s.orders_id
     , s.customers_email_address
     , s.date_purchased
     , COUNT(p.orders_id)
  FROM orders s
  JOIN orders p
    ON p.customers_email_address = s.customers_email_address
   AND p.date_purchased         <= s.date_purchased
 GROUP
    BY s.customers_email_address
     , s.date_purchased
     , s.orders_id
 ORDER
    BY s.customers_email_address
     , s.date_purchased
     , s.orders_id
注意:索引中列的顺序很重要。使用该索引,我们可以执行以下操作:

SELECT s.orders_id
     , s.customers_email_address
     , s.date_purchased
     , COUNT(p.orders_id)
  FROM orders s
  JOIN orders p
    ON p.customers_email_address = s.customers_email_address
   AND p.orders_id              <= s.orders_id
 GROUP
    BY s.customers_email_address
     , s.orders_id
 ORDER
    BY s.customers_email_address
     , s.orders_id
选择s.orders\u id
,s.客户\电子邮件\地址
,s.购买日期
,计数(p.orders\u id)
从命令
联合订单p
在p.customers\u email\u address=s.customers\u email\u address上

和p.orders\u id检索指定结果的一种方法是在选择列表中使用相关子查询。这假设客户标识符是
customers\u email\u address
,并且
date\u purchased
DATETIME
时间戳
(或其他规范格式),并且同一客户没有重复的值(也就是说,该客户没有两个或多个具有相同购买日期的订单)

有了这个索引,我们希望
EXPLAIN
能够显示外部查询使用的索引,满足
ORDER by
(在
Extra
列中没有“usingfilesort”),并作为覆盖索引(在
Extra
列中没有对底层表中的页面进行查找,“usingindex”)

我给出的答案只演示了一种方法。也可以使用连接模式返回等效结果,例如:

SELECT s.orders_id
     , s.customers_email_address
     , s.date_purchased
     , COUNT(p.orders_id)
  FROM orders s
  JOIN orders p
    ON p.customers_email_address = s.customers_email_address
   AND p.date_purchased         <= s.date_purchased
 GROUP
    BY s.customers_email_address
     , s.date_purchased
     , s.orders_id
 ORDER
    BY s.customers_email_address
     , s.date_purchased
     , s.orders_id
注意:索引中列的顺序很重要。使用该索引,我们可以执行以下操作:

SELECT s.orders_id
     , s.customers_email_address
     , s.date_purchased
     , COUNT(p.orders_id)
  FROM orders s
  JOIN orders p
    ON p.customers_email_address = s.customers_email_address
   AND p.orders_id              <= s.orders_id
 GROUP
    BY s.customers_email_address
     , s.orders_id
 ORDER
    BY s.customers_email_address
     , s.orders_id
选择s.orders\u id
,s.客户\电子邮件\地址
,s.购买日期
,计数(p.orders\u id)
从命令
联合订单p
在p.customers\u email\u address=s.customers\u email\u address上

和p.orders\u id检索指定结果的一种方法是在选择列表中使用相关子查询。这假设客户标识符是
customers\u email\u address
,并且
date\u purchased
DATETIME
时间戳
(或其他规范格式),并且同一客户没有重复的值(也就是说,该客户没有两个或多个具有相同购买日期的订单)

有了这个索引,我们希望
EXPLAIN
能够显示外部查询使用的索引,满足
ORDER by
(在
Extra
列中没有“usingfilesort”),并作为覆盖索引(在
Extra
列中没有对底层表中的页面进行查找,“usingindex”)

我给出的答案只演示了一种方法。也可以使用连接模式返回等效结果,例如:

SELECT s.orders_id
     , s.customers_email_address
     , s.date_purchased
     , COUNT(p.orders_id)
  FROM orders s
  JOIN orders p
    ON p.customers_email_address = s.customers_email_address
   AND p.date_purchased         <= s.date_purchased
 GROUP
    BY s.customers_email_address
     , s.date_purchased
     , s.orders_id
 ORDER
    BY s.customers_email_address
     , s.date_purchased
     , s.orders_id
注意:索引中列的顺序很重要。使用该索引,我们可以执行以下操作:

SELECT s.orders_id
     , s.customers_email_address
     , s.date_purchased
     , COUNT(p.orders_id)
  FROM orders s
  JOIN orders p
    ON p.customers_email_address = s.customers_email_address
   AND p.orders_id              <= s.orders_id
 GROUP
    BY s.customers_email_address
     , s.orders_id
 ORDER
    BY s.customers_email_address
     , s.orders_id
选择s.orders\u id
,s.客户\电子邮件\地址
,s.购买日期
,计数(p.orders\u id)
从命令