クロス集計するSQL

クロス集計

テーブルをクロス集計するSQLです。

【元テーブルデータ】
order
----------
uid,pid,quantity,amount,order_at
----------
1,1,1,1000,'2015-03-17 14:00:00'
1,3,2,3000,'2015-03-17 18:00:00'
3,5,1,2000,'2015-03-18 15:00:00'

【SQL例】
以下の例はユーザー・商品別のクロス集計を行います。
縦軸にユーザー、横軸に商品IDで注文数量がセルに出力されます。
select
uid,
sum(case when pid = 1 then quantity else 0 end) as '1',
sum(case when pid = 2 then quantity else 0 end) as '2',
sum(case when pid = 3 then quantity else 0 end) as '3'
from order
group by uid
order by uid asc

以下の例はユーザー・日付別のクロス集計を行います。
縦軸にユーザー、横軸に日付で注文数量がセルに出力されます。
select
uid,
sum(case when date_format(order_at,'%Y-%m-%d') = '2015-03-16' then quantity else 0 end) as '2015-03-16',
sum(case when date_format(order_at,'%Y-%m-%d') = '2015-03-17' then quantity else 0 end) as '2015-03-17',
sum(case when date_format(order_at,'%Y-%m-%d') = '2015-03-18' then quantity else 0 end) as '2015-03-18'
from order
group by uid
order by uid asc

関連記事

コメントは利用できません。

ページ上部へ戻る