Reputation: 58
Issue: I don't know how to convert this PostgreSQL query:
select news_id, sum(case when likes.like then 1 else -1 end) as max_positive from likes group by(news_id) order by(max_positive) desc
to ActiveRecord Query.
What I tried:
Like.group(:news_id)
.sum('CASE WHEN likes.like THEN 1 ELSE -1 end')
.max_by { |_k, v| v }
But result is array and not select news_id.
Upvotes: 1
Views: 104
Reputation: 1930
Like this?
Like.group(:news_id).select("news_id, SUM(case when likes.like then 1 else -1 end) as max_positive").order("max_positive desc")
Upvotes: 2