So-net無料ブログ作成
検索選択

Firebird 3.0 の統計関数 [Firebird]

これは Firebird Advent Calendar 2015 の http://qiita.com/advent-calendar/2015/firebird 22 日目の記事です

Firebird3.0 beta2 から統計算数が使えるようになりました。
ここで、統計関数と言っているのはこの表↓の中の stddev, variance 以外の関数のことです。
https://www.postgresql.jp/document/9.4/html/functions-aggregate.html#FUNCTIONS-AGGREGATE-STATISTICS-TABLE
SQL標準で定義されているものですので、当然 Firebird にも必要とされていた機能だと思っていました。
3.0 の alpha1 リリースあたりで、一部の Window 関数は実装されていましたが、上記の統計関数はまだ実装されていませんでした。
「Window 関数の処理を真似をすれば、一連の統計関数も実装できるんじゃね?」
ということを考えていました。

最新の状況を追いかけるために、Firebird をソースからコンパイルするようになって
http://nakagami.blog.so-net.ne.jp/2014-12-17
(Firebird のリポジトリは sourceforge の subversion のものが本物で JIRA で Issue を管理しているのですが)
GitHub のミラーリポジトリにダメもとで初期実装のプルリクエストを送ったらコメントのやりとりの末マージされました。
というわけで残りも段階的にプルリクエストを送って、無事マージされました。
ここらへん↓
https://github.com/FirebirdSQL/core/pull/2
https://github.com/FirebirdSQL/core/pull/3
https://github.com/FirebirdSQL/core/pull/4
初期実装を私がして(pull request して) Adriano dos Santos Fernandes さんが、コードレビュー、マージ、リファクタリングをしました。
リファクタリングによって、内部で管理している blob_id という数値を無駄遣いしなくなったので、良い形になったと思います。
beta2 で、この統計関数がマージされたものがリリースされました。
beta2 → RC1 の間には新機能は追加されていないので、3.0 にギリギリ間に合ったのかな、と思っています。

計算方法は、ここらへんに書いてあるんですが↓
https://github.com/FirebirdSQL/core/blob/master/doc/sql.extensions/README.statistical_functions.txt
https://github.com/FirebirdSQL/core/blob/master/doc/sql.extensions/README.regr_functions.txt
ぶっちゃけ PostgreSQL のドキュメント(もしくは Redshift のドキュメント)を読んだほうがいいです。
これらのなかで、戻り値について、PostgreSQLのドキュメントで
「浮動小数点型の引数ではdouble precision。それ以外ではnumeric」
となっているところは、 Firebird では double precision が返ってくる点が違います。
PostgreSQL の人は標準偏差が decimal で返ってきたら困らないんでしょうか?

Firebird3.0 は(まだ出てないけど)個人的に特別のリリースになりました。
コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

コメント 0

コメントの受付は締め切りました

Facebook コメント

トラックバック 0