フォロー

Model.search(cond).joins(何とか).group(Model.arel_table[:id]).order('count_all_distinct_all_all desc').limit(1).count('/* DISTINCT */ *')
という地獄みたいなクエリが発生した(作業)

これで↓みたいなSQLが生成されます
SELECT COUNT(/* DISTINCT */ *) AS count_all_distinct_all_all, `models`.`id` AS models_id
FROM `models` INNER JOIN `何とか` ON 略
GROUP BY `models`.`id` ORDER BY count_all_distinct_all_all desc LIMIT 1

Model.search(cond)がincludesを使用している場合に、Railsが変な判断をして単にcountしようとした場合に、COUNT(*) -> COUNT(DISTINCT models.id)に書き換える動作をするっぽい(正確にはincludesがあった場合にdistinctされて(ActiveRecord::Calculationsのcalculate)、distinctな場合にCOUNT(*)->COUNT(DISTINCT PK)に書き換えられてる(ActiveRecord::Calculationsのperform_calculation))

count('/* DISTINCT */ *') とすることによってRailsに対してこれは既にDISTINCTされていると偽装する黒魔術

ログインして会話に参加
GGTea - Mastodon

Mastodonは、オープンなウェブプロトコルを採用した、自由でオープンソースなソーシャルネットワークです。電子メールのような分散型の仕組みを採っています。