我正在试图弄清楚如何编写一个查询,以找出在给定日期范围内有多少客户下了1次、2次等订单。客户使用其唯一的电子邮件地址进行标识,并且订单应该是不同的订单号。
基本上,数据将显示每次购买的许多order-id,因为每个行项目都有自己的重复order-id……
结果应该返回1个客户,该年有4个订单。但是,它不会返回任何内容。任何帮助都将不胜感激。
当前查询(我的数据库表名为amazon)
SELECT COUNT(DISTINCT amazon.`amazon-order-id`), amazon.`buyer-email`
FROM amazon
WHERE amazon.`purchase-date` >= '1/1/2014' and
amazon.`purchase-date` <= '12/31/2014'
GROUP BY amazon.`buyer-email`
HAVING COUNT(amazon.`amazon-order-id`) = 4我正在复制和粘贴下面的一些样本数据:
*114-2021965-2390651 3/18/2014 svj8w3vj3x4y4k8@marketplace.ama4on.com
*114-2021965-2390651 3/18/2014 svj8w3vj3x4y4k8@marketplace.ama4on.com
*114-8957580-1296223 3/26/2014 svj8w3vj3x4y4k8@marketplace.ama4on.com
*114-8957580-1296223 3/26/2014 svj8w3vj3x4y4k8@marketplace.ama4on.com
*108-5564197-2113836 6/2/2014 svj8w3vj3x4y4k8@marketplace.ama4on.com
*108-5564197-2113836 6/2/2014 svj8w3vj3x4y4k8@marketplace.ama4on.com
*114-4685236-6299434 10/11/2014 svj8w3vj3x4y4k8@marketplace.ama4on.com
*114-4685236-6299434 10/11/2014 svj8w3vj3x4y4k8@marketplace.ama4on.com 发布于 2017-03-16 07:51:14
使用您的示例数据,在我将distinct添加到HAVING COUNT语句之后,您的查询就可以工作了。
HAVING COUNT(DISTINCT amazon.amazon-order-id) = 4另外,您的样本数据中的日期也给我带来了一些麻烦。为了使where子句正确工作,我必须将零添加到单位数。不过,我不确定这对你是否重要。
3 -> 03
6 -> 06 2-> 02发布于 2017-03-16 08:08:50
首先,使用更标准的日期格式。
然后,如果你想要一个通用的答案,那么使用两个级别的聚合:
select num_orders, count(*), min(`buyer-email`), max(`buyer-email`)
from (select a.`buyer-email`,
count(distinct a.`amazon-order-id`) as num_orders
from amazon a
where a.`purchase-date` >= '2014-01-01' and
a.`purchase-date` < '2015-01-01'
group by a.`buyer-email`
) a
group by num_orders
order by num_orders;https://stackoverflow.com/questions/42822586
复制相似问题