Sql 从一张桌子上抓取所有被取消的客户,并在另一张桌子上清点他们的所有订单

Sql 从一张桌子上抓取所有被取消的客户,并在另一张桌子上清点他们的所有订单,sql,Sql,如何对以下内容运行SQL查询: 我的第一个表名为customers,如果状态等于cancelled,我想获取customer_id 例如 我的第二个表叫做order_data,我想从第一个表中获取与customer_id匹配的所有记录,这些记录的状态为shipped Customer ID | Status 001 shipped 001 shipped 002 failed 003 shipped 因此,我从第一

如何对以下内容运行SQL查询:

我的第一个表名为customers,如果状态等于cancelled,我想获取customer_id

例如

我的第二个表叫做order_data,我想从第一个表中获取与customer_id匹配的所有记录,这些记录的状态为shipped

Customer ID | Status
001           shipped
001           shipped
002           failed
003           shipped
因此,我从第一个表中获取所有取消的客户,然后在第二个表中运行这些客户,以根据每个ID计算已发货的每个订单

这是为被取消的客户抓取电子邮件:

SELECT customer_id
FROM customers
WHERE status = 'cancelled'
我如何获取这些客户ID,然后在第二个表中查找他们已发货的所有订单。期望的结果是一个客户ID列表,以及每个ID的订单数量计数

Customer ID | Orders
001           2
002           0
003           1
您可以在编辑问题之前使用相关子查询:

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;
编辑:您还可以执行左连接:


注意:如果您想要所有客户,请删除带有c.status='cancelled'的外部where子句。

下面的查询如何

选择客户id、计数* 从订单数据 其中status='shipped' 和客户id,从状态为“已取消”的客户中选择客户id 按客户id分组
向我们展示一些样本表数据和格式化文本的预期结果,没有图像。为什么在样本输出中包含客户ID-001?@Rob为什么没有更新此问题:???5000+以上的人会这样做吗?@Yogesharma这是第一个表中的客户id,在第二个表中运行,然后在旁边输出订单计数,这是否回答了您的问题?删除此答案的相关子查询部分以获得+1!这是这里回答的两个答案的组合:随附一个新信息和新表名…我这里的目的是给您打电话,将此问题标记为重复问题。干杯@很抱歉,我在发布此邮件之前做了此操作one@Rob是的,我知道这一点,但你不同意!你应该更新这个问题,你打开的第一个问题,我们问了你更多的信息。。。而不是提出新的问题。。。回答不正确的问题,让人们投票,因为这些都是有用的答案。这对我有帮助。因为这里和那里的每一个答案都是有帮助的。。。然后从第一个问题中选择正确的一个。
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;
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;