-1

次の4つのテーブルがあると仮定します。

  • 顧客
  • 注文
  • Ordered_items
  • アイテム

Ordersには、注文した顧客を参照する外部キー(customer_id)が含まれています。各ordered_itemには、注文全体を参照する外部キー(order_id)と、アイテムテーブルを参照するitem_idが含まれています。注文の総数(注文が0の顧客を含む)を含む列と、からの一意のアイテムSKU(items.sku)のリストを含む、顧客ごとに1つの行を返す単一のSQLクエリをどのように記述しますか。アイテムテーブル?

4

1 に答える 1

3
  • 顧客ごとに 1 つの行を取得するには、customer_id でグループ化する必要があります。
  • すべての注文を一覧表示できるようにするには、顧客から注文にリンクする必要があります。これは、注文が 0 件の顧客を含めるために、外部結合である必要があります。
  • 顧客がこれまでに注文したすべてのアイテム SKU を一覧表示できるようにするには、ordered_items テーブルを介して items テーブルにリンクする必要があります。group_concatこれらを 1 行にまとめるには、MySQL 関数も使用する必要があります。

そう:

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 に答える