如何写这个查询请帮帮我

时间:2013-03-14 07:29:00

标签: mysql sql rdbms database

假设您有以下四个表格;

  • 客户
  • 订单
  • ordered_items
  • 项目

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

1 个答案:

答案 0 :(得分:3)

  • 要为每个客户获得一行,您需要按customer_id分组;
  • 为了能够列出他们的所有订单,您需要从客户链接到订单 - 这需要是外部联接,包括0订单的客户;
  • 为了能够列出客户订购的所有商品SKU,您需要通过ordered_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