SQL - 没有分组依据的计数?我需要使用两个 ID 进行连接
SQL - count without group by? I need to use two ids for a join
我想我可以计算一个列并将其添加为一个列,因为我可以用一个总和来计算,但是我得到了一个关于必须分组依据/有的错误。我想要的例子...
初始table...
Global ID Local ID Name Role
100 1 Andy Manager
100 2 Andy Manager
100 1 John Co-Manager
200 1 Andy Co-Manager
200 2 John Manager
200 2 Mike Manager
然后我想添加一个列来计算每个组/本地配对中的经理数量...
Global ID Local ID Name Role Manager Count
100 1 Andy Manager 1
100 2 Andy Manager 1
100 1 John Co-Manager 0
200 1 Andy Co-Manager 0
200 2 John Manager 2
200 2 Mike Manager 2
我尝试在全局/本地 ID 上加入两个 table,然后添加一个角色计数列。问题是我收到有关分组/有依据的错误,但我不想对任何内容进行分组。我只想添加列并且行数仍然相同。有什么解决办法吗?
仅供参考 - 对于最后两行,最后一列有 2,因为 John 和 Mike 在同一个组/本地 ID
您对组的定义似乎是 [global_id、local_id] 的独特组合。如果是这种情况,您确实想要 group by
这两个值,并进行计数,其中的作用是 Manager
。但是因为您想要原始 table 中的其他列,您必须在内联视图中进行计数,然后连接回原始 table,如下所示:
select t.*, v.mgr_in_grp
from tbl t
left join (select global_id, local_id, count(*) as mgr_in_grp
from tbl
where role = 'Manager'
group by global_id, local_id) v
on t.global_id = v.global_id
and t.local_id = v.local_id
Fiddle: http://sqlfiddle.com/#!2/fb3ace/2/0
请注意,与您的预期输出相比,第 3 行有所不同。
John,分别在 global_id 和 local_id 100 和 1 的联合经理,属于在该组合中有经理的一对(安迪,你的第一行)。所以出现的计数应该是1.
我想我可以计算一个列并将其添加为一个列,因为我可以用一个总和来计算,但是我得到了一个关于必须分组依据/有的错误。我想要的例子...
初始table...
Global ID Local ID Name Role
100 1 Andy Manager
100 2 Andy Manager
100 1 John Co-Manager
200 1 Andy Co-Manager
200 2 John Manager
200 2 Mike Manager
然后我想添加一个列来计算每个组/本地配对中的经理数量...
Global ID Local ID Name Role Manager Count
100 1 Andy Manager 1
100 2 Andy Manager 1
100 1 John Co-Manager 0
200 1 Andy Co-Manager 0
200 2 John Manager 2
200 2 Mike Manager 2
我尝试在全局/本地 ID 上加入两个 table,然后添加一个角色计数列。问题是我收到有关分组/有依据的错误,但我不想对任何内容进行分组。我只想添加列并且行数仍然相同。有什么解决办法吗?
仅供参考 - 对于最后两行,最后一列有 2,因为 John 和 Mike 在同一个组/本地 ID
您对组的定义似乎是 [global_id、local_id] 的独特组合。如果是这种情况,您确实想要 group by
这两个值,并进行计数,其中的作用是 Manager
。但是因为您想要原始 table 中的其他列,您必须在内联视图中进行计数,然后连接回原始 table,如下所示:
select t.*, v.mgr_in_grp
from tbl t
left join (select global_id, local_id, count(*) as mgr_in_grp
from tbl
where role = 'Manager'
group by global_id, local_id) v
on t.global_id = v.global_id
and t.local_id = v.local_id
Fiddle: http://sqlfiddle.com/#!2/fb3ace/2/0
请注意,与您的预期输出相比,第 3 行有所不同。
John,分别在 global_id 和 local_id 100 和 1 的联合经理,属于在该组合中有经理的一对(安迪,你的第一行)。所以出现的计数应该是1.