SQL server выберите A. *, count (b) group by

Я хочу запустить запрос на сервере sql, чтобы выбрать все элементы таблицы (tableA) с агрегатом из другой таблицы

select a.*, count(b.number) from tableA a
inner join tableB b on a.id = b.a_id
group by a.id;

Это дает следующую ошибку:

Ошибка: Столбец "a.id" недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

SQLState: S1000 ErrorCode: 8120

Какой правильный запрос получить то, что я хочу?

5 ответов

Вы можете использовать это

select a.*, x.number
from tableA a
inner join
 (select b.a_id, count(b.number) number
 from tableB b
 group by b.a_id) x
on x.a_id = a.id


Потому что, используя a.* Вы выбираете все столбцы из tableA. При использовании функции ****** или всего остального вы должны указывать имя столбца в подразделе group by. попробуйте этот путь

select a.id,a.name, count(b.number) from tableA a
inner join tableB b on a.id = b.a_id
group by a.id,a.name

если вы хотите выбрать все столбцы из tableA вы не сможете использовать группу.

select a.*, count(b.number) from tableA a
inner join tableB b on a.id = b.a_id


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


select a.*, B.number
from tableA a
inner join
(
a.id a_id, count(b.number) number from tableA a
inner join tableB b on a.id = b.a_id
group by a.id;
) B on B.a_id = a.id


select a.*, 
 (Select count(b.number) from tableB b where b.a_id = a.id) as "b count"
 from tableA a;

licensed under cc by-sa 3.0 with attribution.