Для Postgresql 8.x у меня есть таблица answers
, содержащая (id, user_id, question_id, choice)
, где choice
- строковое значение. Мне нужен запрос, который вернет набор записей (все возвращенные столбцы) для всех уникальных значений choice
. То, что я ищу, - это одна репрезентативная запись для каждого уникального выбора. Я также хочу иметь совокупный столбец votes
, который представляет собой count()
числа записей, соответствующих каждому уникальному варианту, сопровождающему каждую запись. Я хочу заставить choice
в нижнем регистре сделать это сравнение ( HeLLo и Hello следует считать равными) . Я не могу GROUP BY lower(choice)
, потому что мне нужны все столбцы в наборе результатов. Группировка по всем столбцам приводит к возврату всех записей, включая все дубликаты.
1. Ближайший я получил
select lower(choice), count(choice) as votes from answers where question_id = 21 group by lower(choice) order by votes desc;
Проблема в том, что он не вернет все столбцы.
lower | votes
-----------------------------------------------+-------
dancing in the moonlight | 8
pumped up kicks | 7
party rock anthem | 6
sexy and i know it | 5
moves like jagger | 4
2. Попытка со всеми столбцами
select *, count(choice) as votes from answers where question_id = 21 group by lower(choice) order by votes desc;
Поскольку я не указываю каждый столбец из SELECT
в моем GROUP BY
, это выдает ошибку, говорящую мне сделать это.
3. Указание всех столбцов в GROUP BY
select *, count(choice) as votes from answers where question_id = 21 group by lower(choice), id, user_id, question_id, choice order by votes desc;
Это просто выводит таблицу со столбцом votes
как 1
для всех записей.
Как я могу получить количество vote
и уникальные репрезентативные записи из 1. , но с всеми столбцами из возвращенной таблицы?