SQLite - сумма по небольшим разделам столбца на основе индекса в другом столбце - PullRequest
0 голосов
/ 30 октября 2010

Я хотел бы суммировать по произведению двух столбцов, но я хотел бы сделать это в небольших разделах.То есть для каждого symbol для каждого date я бы хотел сложить произведение oi и 'contract_settle`.Вот фрагмент моей базы данных SQLite:

date    symbol  cont    oi  contract_settle
20030103    NVLS1C      100 NA
20030103    NVLS1C  03F 19  3125
20030103    NVLS1C  03G 8   3128
20030103    NVLS1C  03H 14  3130
20030103    NVLS1C  03M 59  3140
20030103    BGEN1C      90  NA
20030103    BGEN1C  03F 20  4149
20030103    BGEN1C  03G 30  4154
20030103    BGEN1C  03H 20  4158
20030103    BGEN1C  03M 20  4174

Итак, я хотел бы получить такой результат:

date    symbol  cont    oi  contract_settle oi_dollar
20030103    NVLS1C      100 NA          313479
20030103    NVLS1C  03F 19  3125    
20030103    NVLS1C  03G 8   3128    
20030103    NVLS1C  03H 14  3130    
20030103    NVLS1C  03M 59  3140    
20030103    BGEN1C      90  NA          374240 
20030103    BGEN1C  03F 20  4149    
20030103    BGEN1C  03G 30  4154    
20030103    BGEN1C  03H 20  4158    
20030103    BGEN1C  03M 20  4174    

Я думал, что это будет работать:

SELECT *,
(SELECT sum(oi * contract_settle) WHERE symbol=symbol) as oi_dollar
FROM ann

Ноэто дает это:

date    symbol  cont    oi  contract_settle oi_dollar
20030103    NVLS1C      100 NA          NA
20030103    NVLS1C  03F 19  3125            59375
20030103    NVLS1C  03G 8   3128            25024
20030103    NVLS1C  03H 14  3130            43820
20030103    NVLS1C  03M 59  3140            185260
20030103    BGEN1C      90  NA          NA
20030103    BGEN1C  03F 20  4149            82980
20030103    BGEN1C  03G 30  4154            124620
20030103    BGEN1C  03H 20  4158            83160
20030103    BGEN1C  03M 20  4174            83480

Спасибо!

1 Ответ

1 голос
/ 30 октября 2010

Я не знаю SQLite, но я предполагаю, что он поддерживает предложения group by, например,

SELECT date, symbol, SUM(oi *  contract_settle) AS oi_dollar
  FROM add
 GROUP BY date, symbol;
...