そういうことだったんですね

いろいろ調べたり学んだりしたことを忘れないように書き連ねています

rails - クエリの基本(2)



特定のフィールドを取得する

select を使う

User.select(:name)
SELECT name FROM "users"

複数のフィールド名を指定できる

User.select(:id, :name)
SELECT id, name FROM "users"

フィールド名は,区切りの文字列でもよい。
そのまま渡されるので max や minなども使える(てしまう)。

User.select("id,name")
SELECT id,name FROM "users"
ソートする

order を使う。

User.order(:created_at)
レコードの取得数と取得開始位置を制御する

limit と offset を使う。

主キー(id)のソートは無くなるので、orderで明示しないと
結果が異なる。

次の例は先頭5件目から30件ずつ表示する。

User.limit(30).offset(5)
SELECT "users".* FROM "users" LIMIT 30 OFFSET 5

なお、limit と offset は逆にしても同じ結果が得られる。

User.offset(5).limit(30)
グループ化する

group と having を使う。

必要な部分や集計結果を取得する用途には select とあわせて
使うことが多いだろう。

結果は呼び出し元のモデルクラスのインスタンスとして返される。

result = User.select("sex,count(sex) as sex_count").group(:sex).having("age < 20").order(:sex)
result[0]   # Userのインスタンス
result[0].sex   # 1
result[0].sex_count   # 4
SELECT sex,count(sex) as sex_count FROM "users" GROUP BY sex HAVING age < 20 ORDER BY "users"."sex" ASC


パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)