gepuro.net
gepulog

データ分析エンジニアによる備忘録的ブログ

「PostgreSQLで単回帰分析」というタイトルで部誌を書きました

MMAという大学のサークルで、秋号の部詩を発行しました。 2013年 秋号にて公開されています。

他の部員たちも記事を書いているので、是非読んでみてください。

テーブル一覧を取得

コンソール上で

$ psql mydb
などのように接続したあと、
\d
と入力するか、

select * from pg_tables where not tablename like 'pg%' order by tablename;

とクエリを投げると、DB上のテーブル名を取得できる。

PostgreSQLにおける文字列の連結

文字列の連結は、

hoge || poyo
とする。
(hoge || poyo) as mozi
のようにして、列名をつける事が出来るし、
(hoge || poyo)::Date
のようにして、型変換を行うことも出来る。

PostgreSQLでfrom句を使う時に気をつける事

from句で、テーブルを複数選択したい時に

from table1,table2
from (select * from table1) as t1,
        (select * from table2) as t2
とするのは良いが、

from table1, (select * from table2) as t2

が出来ないと思ってたが、出来た。(twitterで教えて頂きましたので、修正しました。)

作業している時に、サブクエリに関するエラーが出ていたのですが、手元で動かしても再現出来ないので、再び出会ったら記事にします。(もしかしたら、エラーメッセージを勘違いしてたのかも)

PostgreSQLでnullの比較をする

本日、陥った罠を忘れないために記録しておきます。

where句でnullが入った値を比較したい時に、<>を用いると、正しく動作しない。なので、is distinct fromを変わりに用いると良い。これは、nullが入っていない場合は、<>と同じ動作をするようです。

参考:9.2. 比較演算子

PythonからPostgreSQLにアクセスする

psycopg2を使うと便利なようです。 以下は、最低限必要になりそうなサンプル。

import psycopg2
con = psycopg2.connect(
    database = "database"
    , user = "username"
    , password = "password"
    , host = "host"
    , port = 5432
    )
cur = con.cursor()
cur.execute("select * from tablename")
cur.fetchall()

PostgreSQLに条件式の書き方

case式を用いる。

select a,
          case a when 0 then 'zero'
                     when 1 then 'one'
                     else a
          end
from table;

すると、次のように得られる.

a case
0 'zero'
1 'one'
2 2

参考:6.12. 条件式

PostgreSQLにおけるキャストの方法

2種類の書き方があるみたい。

cast(hoge as integer)

hoge::integer

で出来る。個人的には、後者の方が好きかな。

データの型は、公式ドキュメントに纏められている。

参考: 第8章 データ型

RからPostgreSQLへアクセスする

library("RPostgreSQL")
con <- dbConnect(PostgreSQL(), 
                 user= "username", 
                 password="password", 
                 dbname="dbname",
                 host="127.0.0.1",
                 port="5432")

rs <- dbSendQuery(con,
                  "select * from tablename")
data <- fetch(rs, n = -1)

簡単ですね。