когда же ты наконец перестанешь задавать подобные вопросы, в гугле на них уже 100500 раз отвечали
вот реально, какая разница в группировки по колонки с булевым значением или там будет любой другой тип?
Rsa97, я хочу получить результат, где сперва идут сделанные todos, а после не сделанные (true/false)
Так же сделанные должны быть упорядоченные по id или user_id
Предположим, что у пользователя 10 записей с completed == true.
id какой из этих записей вы рассчитываете получить в сгруппированной строке и почему именно этот id?
В выборке должны быть только поля, явно указанные в GROUP BY, либо агрегатные функции от других полей.
Ну если строго - то это не совсем так. Достаточно, чтобы выражение группировки полностью покрывало выражение первичного индекса - тогда даже SELECT * не криминал.
А как есть - полностью согласен, запрос не по делу. Чай не MySQL, даже режимом не вырулить.
Не совсем. Ещё допускаются колонки, где в каждой группе остаётся только одно значение. При этом не обязательно, чтобы группировка шла по первичному индексу.
То есть, если в базе только Василии и Семёны, при этом все Василии - Алибабаевичи, а Семёны - Семёновичи, то при группировке по имени вполне можно выбрать отчество без агрегатной функции.
Вот только такая таблица уже не будет в нормальной форме, поскольку содержит функциональную зависимость от неключевого поля.
Действительно, фигню написал.
Rsa97, Постгресс емнип не смотрит в значения. Да и сомнительно мне в подобном случае употребление термина "допускаются" - скорее стоило бы говорить, что особенность данных обеспечивает детерминированность результата.
Подскажите пожалуйста, из-за чего ошибка, у меня при запросе SELECT * from todos GROUP BY user_id;
ERROR: column "todos.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT * from todos GROUP BY user_id;
При этом запрос отрабатывает нормально SELECT * from todos GROUP BY id;
Так же и ваш запрос не срабатывает SELECT * from todos GROUP BY user_id, completed;
ERROR: column "todos.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT * from todos GROUP BY user_id, completed;
я хочу получить результат, где сперва идут сделанные todos, а после не сделанные (true/false)
Так же сделанные должны быть упорядоченные по id или user_id
SELECT completed, user_id, id from todos ORDER BY completed, user_id, id;