2013-05-05 4 views
0

Я хотел бы суммировать столбец оценки группы записей «записей» по идентификатору пользователя, а затем мне хотелось бы сравнить сумму баллов каждого пользователя. для этого я написал ниже запросВыберите сумму с условием postgres sql + rails

Подведем счет пользователем

Recording.select ("сумма (оценка), как счет, user_id") группа. (: user_id) .order ("оценка DESC")

SELECT SUM (оценка), как оценка, user_id оТ "записи" GROUP BY user_id

Для того, чтобы сравнить сумму баллов

Recording.select ("сумма (оценка), как счет, идентификатор_пользователя") группа. (: Идентификатор_пользователь) .гд ("оценка> 200")

SELECT, сумма (оценка), как счет, идентификатор_пользователь FROM «записей» WHERE (оценка> 200) GROUP BY user_id

Второй запрос не возвращает действительные записи

ответ

1

Вы не прокомментировали роль score > 200, но я подозреваю, что это что вы на самом деле т:

SELECT sum(score) AS sum_score, user_id 
FROM recordings 
GROUP BY user_id 
HAVING sum(score) > 200 

Значение, вы хотите, чтобы эти пользователи, где общий балл (сумма всех баллов) превышает 200. Ваш запрос будет строить сумму индивидуальных значений, превышающих 200. Возможно, но вряд ли?

Вы положили наработки для вашей проблемы, используя имя столбца в качестве псевдонима для результата агрегатной функции:


             
  
    sum(score) as score 
  

Это заряженное footgun. Вместо этого я использовал sum_score для устранения разногласий.

Вы быстро выстрелили себе в ногу, сбив псевдоним с базовой колонкой. Вы не можете ссылаться на псевдонимы столбцов в предложении WHERE или HAVING, где вы можете ссылаться только на базовые таблицы. Кроме того, вы путаете роль WHERE и HAVING. The manual has the basics about that..

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