カラム同士を足し算する関数のSUMはあるんですが、掛け算する関数はMySQLには無いんですよね。Excelならば、PRODUCT関数に相当するものです。
それでも使う必要が生じまして、ネットで色々調べたのの、中々ビンゴの情報が出て来なかったのでメモしておきます。
テーブルの作成
まずは、このSQLを実行して、テーブルを作成して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
CREATE TABLE test( date TEXT, num DOUBLE ); INSERT INTO test VALUES('2015-1-1', '2'); INSERT INTO test VALUES('2015-3-1', '5'); INSERT INTO test VALUES('2015-2-1', '2.5'); |
こんなテーブルが作成されると思います。日付の順番を替えているのはわざとです。
スポンサー
累計の計算
まずはこのテーブルについて、1月から順に累計を求めてみます。累計を求めるSQLは以下の通りです。
1 2 3 4 5 |
SELECT *, (SELECT SUM(b.num) FROM test b WHERE b.date <= a.date) AS ruikei FROM test a ORDER BY a.date ASC; |
キチンと日付順に累積が求められました。この累計については、まだよく見るアルゴリズムです。
累積(カラム同士の掛け算)の計算
カラム同士の足し算は、累計で良いんですが、掛け算は、何て言うのでしょう?累積では無いような?分かる方は教えて下さい。
さて、SQLは以下の通りです。小数点第2位以下切り捨てにしています。
参考:TRUNCATE
1 2 3 4 5 |
SELECT *, (SELECT TRUNCATE(EXP(SUM(log(b.num)))+0.005,2) FROM test b WHERE b.date <= a.date) AS ruiseki FROM test a ORDER BY a.date ASC; |
無事にカラム同士の掛け算が出来ました。
1 |
EXP(SUM(log(b.num)))+0.005 |
の部分については、私も分かっていません。掛け算を、SUMを使って可能にするおまじない、位に考えて下さい。笑
スポンサー