Tomek Wejchorowski
Tomek Wejchorowski

Reputation: 58

Transform SQL query to ActiveRecord Query

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

Answers (1)

lusketeer
lusketeer

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

Related Questions