スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
拍手コメントを見る

SQL と ロト6

2009/11/01 記事内容変更。"NO"カラム名を"DRAW"に変更

ロト6は、43個の数字のうちから重複しないものを6つ選んで買う一口200円のクジですが、先週で467回となっていました。

気が向いたときに一口だけ購入していたのですが、いい加減回数も増えてきているので、サンプリングしてみよっかな?という気になってきました。

出目の傾向がつかめたら、限られた数字の中から実際に買う番号をピックアップすれば済むって寸法です。毎回毎回43個から6個選ぶ必要がなくなるだけでもストレスから解放される、、はず。

なんて邪推はおいておいて、単純に「なんちゃって予想できるのかな?」という知的好奇心が70%くらいを占めています。・・・たぶん。

さてと、

自宅のPCにはDBが入っていないので、MySQLPostgreSQL のどっちが良いのか考えましたが、これまでに使ったことがない PostgreSQL に手を出してみようと思いまして、おもむろにインストール。。

あっさりとインストールは終わりましたが、立ち上げてみると業務で使っている Microsoft SQL Server と使い勝手が違うため、違和感ありありで凹みそうになりました。

データベースやテーブルを pgAdminIII というプログラムから作ると、余計な事に名称をダブルクォーテーションで囲ってくれてます。
ダブルクォーテーションで囲まれたデータベース名やテーブル名だけでなく、カラム名など、全てがケースセンシティブになるようです。
うぎゃ、面倒くさぁ。。。

と思いましたが、コマンドプロンプトから作ればいいんじゃん!という事で最初のハードルは突破。

作ったテーブルはこんな感じ。
回数#1#2#3#4#5#6bonus#開催日
DRAWID1ID2ID3ID4ID5ID6IDBDATE

DRAW はロトの抽選回数。
ID1 ~ ID6 にはそれぞれ6個の数字。
IDB はボーナス数字。
DATE は抽選日。

ということで、467回分の記録をこのテーブルに書き込んでいく作業から開始です。
ロト6の本家に過去データがあるので、それを加工しつつ、、少々お時間頂いております・・・みたいな。
思ったよりも面倒だ、、いやいや負けるなおとっつぁん!これも自己啓発だぜ、動機がどうであれな。

なんとかレコードの登録は済みました。

ここで、ちょっとした傾向がわかったので、つかみで公表しておきます。

確率の問題なのですから、1~43の数字が満遍なく出現しているのかと思いきや、なんとまぁ、出現率の高い数字と出現率の低い数字には倍違うことがわかりました。

ぱんぱかぱーん、発表します。
間違いここから~
467回中、77回も登場したのは、「37」。およそ6回に1度はでる事になります。
467回中、35回しか登場しなかったのは、「24」。およそ13回に1度しかでない。
~間違いここまで
467回中、78回も登場したのは、「30」。およそ6回に1度はでる事になります。
467回中、43回しか登場しなかったのは、「24」。およそ10回に1度しかでない


ま、これで言えるのは、「24」は選ぶな、って事だけですね。
・・・ほら、これだけで、42個から6つを選べばよくなりました、、、よね?

では、今回の最後に、この結果を導き出すに至った、SQL を書いておきます。
もっとスマートな方法があったらご指導いただければ幸いです。

-- のちのち使えそうなので、view として定義
-- 1~43の出現数を出します。
-- デフォルトソートは出現数の降順です。
-- 利用するときは、普通に
-- select * from v_freq6
-- でどうぞ。

CREATE OR REPLACE VIEW v_freq6 AS
SELECT value, SUM(freq) as total
FROM (
SELECT ID1 as value, COUNT(ID1) as freq FROM Loto6Result GROUP BY ID1
UNION ALL
SELECT ID2, COUNT(ID2) FROM Loto6Result GROUP BY ID2
UNION ALL
SELECT ID3, COUNT(ID3) FROM Loto6Result GROUP BY ID3
UNION ALL
SELECT ID4, COUNT(ID4) FROM Loto6Result GROUP BY ID4
UNION ALL
SELECT ID5, COUNT(ID5) FROM Loto6Result GROUP BY ID5
UNION ALL
SELECT ID6, COUNT(ID6) FROM Loto6Result GROUP BY ID6
) t
GROUP BY t.value
ORDER BY total DESC;
-- 以上


・・・ to be continued ・・・(ほんとかな?) 拍手コメントを見る

テーマ : データベース
ジャンル : コンピュータ

tag : ロト6 PostgreSQL MySQL

コメント

SQL一部訂正

UNION ではなく、UNION ALL にしないとダメでした。
訂正したら結果が変わったので、本文も訂正です。
非公開コメント
ブログ内検索
プロフィール

雷ぶ

Author:雷ぶ

最近の記事
最近のコメント
最近のトラックバック
カテゴリー
月間アーカイブ
ブロとも申請フォーム

この人とブロともになる

RSSフィード
リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。