我以为我可以计算一个列并将其添加为列,因为我可以使用总和,但是我得到一个关于必须分组/拥有的错误。我想要的一个例子......
初始表......
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
然后,我想添加一个列,计算每个组/本地配对中的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上的两个表,然后添加一个列来计算Role的数量。问题是我收到有关分组/分组的错误,但我不想将任何内容分组。我只想添加列,但仍然具有相同的行数。有什么方法吗?
仅供参考 - 对于最后两行,最后一列有2,因为John和Mike在同一组/本地ID上
答案 0 :(得分:1)
看起来您对组的定义是[global_id,local_id]的唯一组合。如果是这种情况,您确实需要group by
这两个值,并进行计数,其中角色为Manager
。但是因为你想要原始表中的其他列,你必须在内联视图中进行计数,然后再加入原始表,如下所示:
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
小提琴: http://sqlfiddle.com/#!2/fb3ace/2/0
请注意,与预期输出相比,第3行存在差异。
分别是global_id和local_id 100和1的共同经理John,属于一个在该组合中有一个经理的对(Andy,你的第一行)。所以计数应该是1。