タグ

2012年2月8日のブックマーク (4件)

  • Subqueries in activerecord

    With SQL I can easily do sub-queries like this User.where(:id => Account.where(..).select(:user_id)) This produces: SELECT * FROM users WHERE id IN (SELECT user_id FROM accounts WHERE ..) How can I do this using rails' 3 activerecord/ arel/ meta_where? I do need/ want real subqueries, no ruby workarounds (using several queries).

    Subqueries in activerecord
  • Mysqlのサブクエリとgroup、orderの優先度

    Mysqlを使ってシステムを組んでいると、いろんな条件でデータを取得したい場面がでてくる。その中で、使用頻度が高いのがgroup by、order by、サブクエリの組み合わせ。 group byをすると、指定したキーで一番最初に現れたものが残り、後から現れたものは削除される。order by と併用した場合は、group by した結果に対して、order byが適用される。 order by を適用した後に、group by を適用したい場合は、サブクエリを用いてorder by を実行するSQLをテーブルとみなして、group by をかけるという方法になる。 例えば、mixiのようなSNSで各ユーザの最新の日記を取得したい場合は、日記テーブルを作成日で、降順にソートするSQLをテーブルとみなして、ユーザIDでgroup by をかけるというサブクエリを利用すれば可能。 group

    Mysqlのサブクエリとgroup、orderの優先度
    animist
    animist 2012/02/08
  • 【初級】新人SEのためのSQLの基礎 第3回(後半) 集約関数,GROUP BY句,HAVING句の注意点

    図6●HAVING句の利用上の注意点<BR>HAVING句はWHERE句で置き換えることができる場合がある。図は,同じ結果を検索するHAVING句を利用したSELECT文((1))と,HAVING句を使わないでWHERE句を利用したSELECT文((2))の例である。同じ結果を検索するが,実行性能は(2)WHERE句を利用したSELECT文の方が高い。WHERE句を使った場合はインデックス検索であるが,HAVING句を使った場合は全件検索になる RDBMSには,数値カラムの合計値計算(SUM)や平均値計算(AVG)を行う集約関数が用意されている。例えば図3[拡大表示]の販売テーブルにおいて「値引き」の合計値を求める場合, SELECT SUM(NEBIKI) FROM HANBAI_TBL ; とすると,NEBIKI(値引き)の合計金額を求めることができる(図3(1))。合計値や平均値のほ

    【初級】新人SEのためのSQLの基礎 第3回(後半) 集約関数,GROUP BY句,HAVING句の注意点
  • ActiveRecordのfindで、:includeと:joinsを使ったときの違いって? - 超初心者のロボット製作日記

    頭の中では:includeと:joinsの違いが分かったつもりになっているが、今まで実際に、内部的な動作を詳しく調べたことはなかった。 というわけで、ちゃんと理解するために実験を行ってみた。 モデルはこうなっている。 class Hoge < ActiveRecord::Base has_many :fugas end ビューはこんな感じ。 %h1 Listing hoges %table %tr %th Name - @hoges.each do |hoge| %tr %td= h hoge.fugas[0].name @hoges = Hoge.all(:joins => :fugas) の場合と、 @hoges = Hoge.all(:include => :fugas) の場合で、どういった挙動の違いが出るのかを、ログで確認してみた。 development.log :includ

    ActiveRecordのfindで、:includeと:joinsを使ったときの違いって? - 超初心者のロボット製作日記