我有一张 table ,上面有一个人的名字,位置(他们住的地方)和一个parent_id
( parent 存储在另一张 table 上)。因此,例如:

name    | location  | parent_id
--------+-----------+-----------
Joe     | Chicago   | 12
Sammy   | Chicago   | 13
Bob     | SF        | 13
Jim     | New York  | 13
Jane    | Chicago   | 14
Dave    | Portland  | 14
Al      | Chicago   | 15
Monica  | Boston    | 15
Debbie  | New York  | 15
Bill    | Chicago   | 16
Bruce   | New York  | 16

我需要数一下住在芝加哥有多少人
居住在纽约的 sibling (共享parent_id)。因此,对于上面的示例,
计数将是3。
name    | location  | parent_id
--------+-----------+-----------
Joe     | Chicago   | 12
Sammy   | Chicago   | 13   * sibling Jim lives in New York
Bob     | SF        | 13
Jim     | New York  | 13
Jane    | Chicago   | 14
Dave    | Portland  | 14
Al      | Chicago   | 15   * sibling Debbie lives in New York
Monica  | Boston    | 15
Debbie  | New York  | 15
Bill    | Chicago   | 16   * sibling Bruce lives in New York
Bruce   | New York  | 16

有人可以帮我编写SQL查询此计数吗?

最佳答案

相关查询是一个很好的方法,并且非常有效。避免使用distinct,因为这是一项昂贵的操作。分组依据是使用distinct的不错选择。了解数据并相应地构造查询。这是引擎优化的另一个选项...

select count(*)
from (select * from #t where Location = 'Chicago') ch
inner join (select * from #t where Location = 'New York') ny on ch.ParentID = ny.ParentID

09-12 10:57