Oracle11g
行の各ペアが最小合計を満たす集計行を取得する方法は? 指定するwhere total_lot > N
と、保持したい行を除外します。
このデータに関する質問に答えたいと思います: 合計ロット サイズが 6 を超える KEYS を持ち、合計ロット サイズが 4 を超える LOCK を持つ ID はどれですか?
with inventory_items as
(
select 1 as item_id, 'KEYS' as code, '1020' as sub_code, 4 as lot_size from dual union all
select 1 as item_id, 'KEYS' as code, '2210' as sub_code, 4 as lot_size from dual union all
select 1 as item_id, 'LOCK' as code, '1610' as sub_code, 3 as lot_size from dual union all
select 1 as item_id, 'LOCK' as code, '1031' as sub_code, 2 as lot_size from dual union all
select 2 as item_id, 'KEYS' as code, '1020' as sub_code, 2 as lot_size from dual union all
select 2 as item_id, 'KEYS' as code, '2210' as sub_code, 1 as lot_size from dual union all
select 2 as item_id, 'LOCK' as code, '1610' as sub_code, 1 as lot_size from dual union all
select 2 as item_id, 'LOCK' as code, '1031' as sub_code, 3 as lot_size from dual union all
select 3 as item_id, 'KEYS' as code, '1031' as sub_code, 8 as lot_size from dual
)
select distinct item_id, code,
sum(lot_size) over (partition by item_id, code) as total_lot
from inventory_items
order by item_id, code
望ましい結果
- ID には LOCK があり、
- ID には KEYS があり、
- KEYS の Total_lot が > 6 であり、
- LOCK の Total_lot は > 4 です
出力:
ITEM_ID CODE TOTAL_LOT
----- ----- --------
1 KEYS 8
1 LOCK 5