从一张桌子上抓取所有取消的客户,并在另一张桌子上计算他们的所有订单
Posted
技术标签:
【中文标题】从一张桌子上抓取所有取消的客户,并在另一张桌子上计算他们的所有订单【英文标题】:Grab all cancelled customers from one table and count all their orders in another 【发布时间】:2020-01-22 15:56:50 【问题描述】:如何对以下内容运行 SQL 查询:
我的第一个表名为 "customers",如果 "status" 等于 ,我想获得 "customer_id" “取消”
例如
Customer ID | Status
001 active
002 cancelled
003 cancelled
我的第二个表名为 "order_data",我想从第一个表中获取与 "customer_id"'s 匹配的所有记录,这些记录具有“status” " "已发货"。
Customer ID | Status
001 shipped
001 shipped
002 failed
003 shipped
所以我从第一个表中获取所有已取消的客户,然后通过第二个表运行这些客户,以计算每个 ID 已发货的订单。
这是为被取消的客户抓取电子邮件:
SELECT customer_id
FROM customers
WHERE status = 'cancelled'
如何获取这些客户 ID,然后在第二个表中找到他们所有已发货的订单。期望的结果是客户 ID 列表和每个订单的数量?
Customer ID | Orders
001 2
002 0
003 1
【问题讨论】:
向我们展示一些示例表数据和预期结果(格式文本,无图像。) 为什么在示例输出中包含Customer ID - 001
?
@Rob 你为什么不更新这个问题:***.com/questions/59859226/… ??? 5000+ 的人会这样做吗?
@YogeshSharma 这是第一个表中的客户 ID,遍历第二个表,然后输出旁边的订单数
这能回答你的问题吗? SQL query to count number of Woocommerce orders by a list of users
【参考方案1】:
您可以使用 correlated 子查询(在问题编辑之前):
SELECT c.customer_id,
(SELECT COUNT(*)
FROM order_data od
WHERE od.customer_id = c.customer_id AND od.status = 'shipped'
) AS Orders
FROM customers c
WHERE c.status = 'cancelled'
GROUP BY c.customer_id;
编辑:你也可以LEFT JOIN
:
SELECT c.customer_id, COUNT(DISTINCT od.customer_id) AS Orders
FROM customers c LEFT JOIN
order_data od
ON od.customer_id = c.customer_id AND od.status = 'shipped'
WHERE c.status = 'cancelled'
GROUP BY c.customer_id;
注意:如果您想要所有客户,请删除带有c.status = 'cancelled'
的外部where
子句。
【讨论】:
删除此答案的相关子查询部分以获得+1! 这是此处回答的两个答案的组合:***.com/questions/59859226/… 带有一个新信息“已发货”和新表名...我的意思是也打电话给您将此问题标记为重复.干杯! @VBoka 对不起,我在发布这个之前已经这样做了 @Rob,是的,我知道,但你不同意!您应该按照我们的要求更新该问题(您打开的第一个问题)......而不是打开新问题......并回答那里不正确的问题并让人们投票,因为这些都是有用的答案。投票=它帮助了我。因为这里和那里的每一个答案都有帮助......然后你从第一个问题中选择正确的一个。【参考方案2】:下面的查询怎么样
select customer_id, count(*)
from order_data
where status = 'shipped'
and customer_id in (select customer_id from customers where status = 'cancelled')
group by customer_id
【讨论】:
以上是关于从一张桌子上抓取所有取消的客户,并在另一张桌子上计算他们的所有订单的主要内容,如果未能解决你的问题,请参考以下文章