-1

假设您有以下四个表;

  • 顾客
  • 订单
  • 订购物品
  • 项目

Orders 包含一个引用下订单的客户的外键 (customer_id)。每个ordered_item 包含一个引用整个订单的外键(order_id),以及一个引用items 表的item_id。您将如何编写为每个客户返回一行的单个 SQL 查询,其中包括一列,其中包含他们的订单总数(包括任何订单为 0 的客户),以及来自物品表?

4

1 回答 1

3
  • 要为每个客户获取一行,您需要按 customer_id 分组;
  • 为了能够列出他们的所有订单,您需要从客户链接到订单 - 这需要是外部连接,以包括具有 0 个订单的客户;
  • 为了能够列出客户曾经订购过的所有商品 SKU,您需要通过 ordered_items 表链接到 items 表;您还需要使用 MySQL 函数group_concat,以便能够将这些总结在一行中。

所以:

select c.customer_id, 
       count(distinct o.order_id) distinct_orders,
       group_concat(distinct i.sku) ordered_item_skus
from customers c
left outer join orders o on c.customer_id = o.customer_id
left outer join order_items oi on o.order_id = oi.order_id
left outer join items  i on oi.item_id = i.item_id
group by c.customer_id
于 2013-03-14T07:44:56.797 回答