【问题标题】: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

【问题讨论】:

标签: sql


【解决方案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!
  • 这是此处回答的两个答案的组合:stackoverflow.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多