トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

7-72 外部結合で結合した行数を取得

SQLパズル

商品テーブル
商品ID
------
     1
     2
     3

商品売上テーブル
商品ID      販売日
------  ----------
     1  2006/10/10
     1  2006/10/11
     1  2006/10/12
     3  2006/10/13

商品IDごとの、
販売数(商品売上テーブルのレコード数)、
最終販売日(商品売上テーブルの販売日の最大値)
を出力する。

出力結果
商品ID  販売数   最終販売日
------  ------  ----------
     1       3  2006/10/12
     2       0        null
     3       1  2006/10/13


SQL

with 商品 as (
select 1 as 商品ID from dual
union select 2 from dual
union select 3 from dual),
商品売上 as (
select 1 as 商品ID,to_date('2006/10/10','yyyy/mm/dd') as 販売日 from dual
union select 1,to_date('2006/10/11','yyyy/mm/dd') from dual
union select 1,to_date('2006/10/12','yyyy/mm/dd') from dual
union select 3,to_date('2006/10/13','yyyy/mm/dd') from dual)
select a.商品ID,count(b.商品ID) as 販売数,max(b.販売日) as 最終販売日
  from 商品 a Left Join 商品売上 b
    on a.商品ID = b.商品ID
group by a.商品ID
order by a.商品ID;


解説

count関数で、
外部結合で結合した行数を取得してます。