我想在sql server上运行一个查询,用另一个表中的聚合选择表(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
获得我想要的正确查询是什么?
答案 0 :(得分:1)
您可以使用
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
答案 1 :(得分:0)
select a.*,
(Select count(b.number) from tableB b where b.a_id = a.id) as "b count"
from tableA a;
答案 2 :(得分:0)
在具有分组依据的查询中,所有列都应显示聚合函数或逐列提示。 您的错误是因为除了id之外,您的表'a'列不是按列表分组的,并且不会出现聚合函数。
答案 3 :(得分:0)
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
答案 4 :(得分:0)
因为您使用a.*
选择了tableA
中的所有列。使用aggrgate函数grouby
或其他任何内容时,您必须在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
中选择所有列,则无法使用group by。
select a.*, count(b.number) from tableA a
inner join tableB b on a.id = b.a_id