Я изначально неправильно понял вопрос.
MySQL больше не поддерживает:
select b
from a
group by c;
(по крайней мере, с использованием настроек по умолчанию). Ура! Это возвращает ошибку точно так же, как и должно быть, и почти во всех других базах данных (я думаю, что SQLite может быть последним препятствием).
Это нарушение стандарта - в целом (см. ниже). Проблема в том, что одна строка возвращается на c
значение. Все, кроме c
в GROUP BY
должно быть аргументом для GROUP BY
.
В одном случае это разрешено. Это когда c
является первичным или уникальным ключом в a
(технически называемый «функционально зависимым»). В этом случае вы можете выбрать другие столбцы из таблицы без функций агрегирования. Postgres - это одна из баз данных, которая поддерживает это.
Если вам нужно одно значение b
на c
, тогда каноническое решение будет выглядеть примерно так:
select max(b)
from a
group by c;
Postgres также предлагает distinct on
, что обеспечивает большую гибкость:
select distinct on (c) b
from a
order by c, random();