よく忘れるのでメモ。
通常はリレーションで解決するのであまり使いませんが、Rails(ActiveRecord)で SELECT COUNT(DISTINCT some_id) FROM users
のようなSQLを実装する方法です。
少し古い情報には
User.count(:some_id, distinct: true)
と書いてあることが多いですが、rails4ではこの方法ではできません。
以下のようにすれば実装できます。
User.distinct.count(:some_id)
以下のSQLに展開されます。
SELECT DISTINCT COUNT(DISTINCT `users`.`some_id`) FROM `users`
追記
上記のSQLだと全件サーチになるのですごく遅いです。
SELECT COUNT(DISTINCT `users`.`some_id`) FROM `users`
ならUsing index for group-byになってかなり速くなります。が、このSQLをARで生成する方法が分からない。
仕方なく
User.count('DISTINCT some_id')
にしたところ後者のSQLに展開されました。