初めての投稿。私の質問を解決するためにここに何も見つかりませんでした。私は、各位置での各ディーラーのための実現位置を見つけたいSQLでネット取引位置を計算する
dealid deal_counterparty_id deal_instrument_id deal_type deal_amount
20001 703 1010 B 3588.81
20002 701 1001 S 3412.81
20003 701 1004 B 8527.11
20004 701 1011 S 2441.77
20005 703 1010 B 3633.33
20006 702 1011 S 2415.16
20007 704 1003 S 1426.14
20008 701 1012 B 1858.82
20009 703 1009 B 3571.77
:
は、私は約63万エントリ、ここではサンプル入力との契約のテーブルを持っています。すなわち、ディーラーは、1つの取引相手に対して1つの取引について何千もの取引を行っているので、その取引相手に対するその商品の正味のポジションは何ですか?
私は3つの列、deal_counterparty_id、deal_instrument.id、ネットのポジションが必要です。私は4カウンターパーティ(701、702、703、704)と20個の楽器(1001年から1020年)を持っているので、サンプル出力は次のようになります(0結果取得)
deal_counterparty_id deal_instrument_id net_position
701 1001 5833.34
701 1002 -3994.21
701 1003 30300.00
...
702 1001
マイコード:
をselect buy.deal_counterparty_id, buy.deal_instrument_id, sum(buy.deal_amount) - sum(sell.deal_amount) as net_position
from (select deal_id, deal_counterparty_id, deal_instrument_id, deal_type, deal_amount
from deal where deal_type = 'B') as buy
join (select deal_id, deal_counterparty_id, deal_instrument_id, deal_type, deal_amount
from deal where deal_type = 'S') as sell
on buy.deal_instrument_id = sell.deal_instrument_id
group by buy.deal_counterparty_id, buy.deal_instrument_id;
ありがとうございます!私はあなたが求めているものを理解していれば
サンプル入力+出力?すべての開発者のようなものではありません。 – Steve
サンプル入力は上記のテーブルイメージです。サンプル出力は次のようになります。 deal_counterparty_id || deal_instrument_id ||ネットポジション 701 || 1001 || -3495.40 701 || 1002 || 7825.01 ... 701 || 1020 || 1938.23 702 || 1001 || 4726.44 –
'JOIN'の代わりに' IF(deal_type = 'B'、deal_amount、 - deal_amount)net_amount'で始まります。 –