- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Perl-DBIC/複雑なSQL/複雑なSQL1 へ行く。
- 1 (2007-03-26 (月) 23:34:49)
複雑なSQL
注文マスタテーブルとその商品明細テーブル(注文された商品IDと数量) があり、具体的には以下のような構成。
order
- order_id
- order_date
order_goods
- goods_id
- quantity
- order_id
直近30日間である商品(ID:100,110,120)がそれぞれ何個売れたかを求めたい。具体的なSQLは以下の通り。
SELECT og.goods_id, sum(og.quantity) from order_goods og join order o on og.order_id = o.order_id where og.goods_id in (100,110,120) and now() <= o.order_date + '30 days' group by og.goods_id;
Perlコードは以下の通り。
my $rs = $c->model('MyappDB::Order_goods'); my $date = ">= now() - interval '30 days'"; $rs = $rs->search( { 'order.order_date' => \$date, 'me.goods_id' => { -in => [@goods_ids] } }, { join => 'order', select => [ 'me.goods_id', {sum => 'me.quantity'} ], as => [qw/goods_id sum/], group_by => [qw/me.goods_id/] });