Некоторые базы данных более спокойны по этому поводу, хорошо это и плохо. Запрос не является специфичным, поэтому результат также не является специфичным. Если база данных разрешит запрос, она вернет по одной записи из каждой группы, и не важно, какая из них. Другие базы данных являются более конкретными и требуют, чтобы вы указали, какое значение вы хотите получить из группы. Они не позволят вам написать запрос с неопределенным результатом.
Единственные значения, которые вы можете выбрать без агрегата, это значения в предложении group by
:
select foo.id, count(bar.id)
from foo inner join bar on foo.id = bar.foo_id
group by foo.id
Вы можете использовать агрегаты для получения других значений:
select foo.id, min(foo.price), count(bar.id)
from foo inner join bar on foo.id = bar.foo_id
group by foo.id
Если вам нужны все значения из таблицы foo, вы можете поместить их все в предложение group by
(если это дает правильный результат):
select foo.id, foo.price, foo.name, foo.address, count(bar.id)
from foo inner join bar on foo.id = bar.foo_id
group by foo.id, foo.price, foo.name, foo.address
Или вы можете присоединиться к таблице с помощью подзапроса:
select foo.id, foo.price, foo.name, foo.address, sub.bar_count
from foo
inner join (
select foo.id, bar_count = count(bar.id)
from foo inner join bar on foo.id = bar.foo_id
group by foo.id
) sub on sub.id = foo.id