-1

У меня есть четыре столбца в таблице, называемые записями, такими как score, event_id, user_id, и я хотел бы суммировать счет записей на основе идентификатора пользователя id + event id, , а затем я бы например, показывать пользователям различные события, отсортированные по счету.Сортировка групп записей на основе разных столбцов

Так я wriiten приведенный ниже код

Recording.select("user_id,event_id,sum(score) as score").group(:user_id,:event_id).order("score DESC") 

и выше запрос выводит записи на основе максимального балла слишком мин оценка, как показано ниже

#<Recording user_id: 4, event_id: 51, score: 64622>, 
#<Recording user_id: 3, event_id: 51, score: 5912> 
#<Recording user_id: 4, event_id: 31, score: 62>, 
#<Recording user_id: 3, event_id: 48, score: 0> 

Но я хочу, чтобы повторно arrabge результаты (пользователи разных событий, отсортированные по дате)

#<Recording user_id: 4, event_id: 51, score: 64622>, 
#<Recording user_id: 4, event_id: 31, score: 62>, 
#<Recording user_id: 3, event_id: 48, score: 0>, 
#<Recording user_id: 3, event_id: 51, score: 5912> 
+0

Я группировка записей с двумя колонками, user_id и event_id – loganathan

+0

Этот вопрос крайне неясен. Ваши примеры вряд ли объясняют, что ваш текст не может описать. Престижность @PinnyM, которая, кажется, поняла это после нескольких комментариев. –

ответ

1

Для PostgreSQL, лет и может использовать оконную функцию, чтобы сделать это:

select_sql <<-SELECT 
    user_id, event_id, sum(score) as score, 
    ROW_NUMBER() OVER (PARTITION BY user_id, event_id ORDER BY sum(score) DESC) as rowNum 
SELECT 

subquery = Recording.select(select_sql).group(:user_id, :event_id).to_sql 

Recording.select("*").from(Arel.sql("(#{subquery}) t")). 
      order("rowNum, score DESC") 
+0

Я никогда не хочу сортировать записи по событию event_id и оценивать, я хотел бы упорядочить записи на основе оценки каждого события. Как belwo – loganathan

+0

Как насчет результатов возврата (64622, 5912, 62, 52), как вы думаете, не в порядке убывания? Какую еще логику вы хотите использовать для заказа баллов? – PinnyM

+0

Я хочу переставить записи с максимальным счетом каждого события до минимального балла, а не только по счету. Скажем, если у нас есть три события, то выход должен быть таким, как первые 3 записи должны иметь первые 3 значения max каждого события, а для вторых 3 записей должны быть требуются 3-х максимальные баллы каждого события. – loganathan

Смежные вопросы