如何计算表A中但不在表B中的成员数

时间:2018-11-26 21:20:59

标签: sql sql-server

我有两个表,想统计一个表中的成员ID数,而另一表中的成员ID数。

plt.plot(df['data'],c='b')

for idx,row in out.iterrows():
    x0 = np.datetime64(row['start'])
    y0 = df.loc[x0]['data']
    x1 = np.datetime64(row['end'])
    y1 = df.loc[x1]['data']
    plt.plot([x0,x1],[y0,y1],c='r')

这是永久的,不应该的。代码可以吗?

如果您有更有效的代码,请提出建议。

2 个答案:

答案 0 :(得分:4)

我将其更改为not exists并推荐一个索引:

select COUNT(DISTINCT u.member_id)
from database.tablea u
where not exists (select 1
                  from database.tableb b
                  where u.member_id = b.member_id
                 );

然后,您想要在tableb(member_id)上建立索引。

如果您有members表,那么您可能会发现最快的方法是:

select count(*)
from members m
where exists (select 1
              from database.tablea u
              where u.member_id = m.member_id
             ) and
      not exists (select 1
                  from database.tableb b
                  where b.member_id = m.member_id
                 );

tablea(member_id)tableb(member_id)上使用索引,这应该很快。唯一的情况不是这样:members中有成千上万的成员,tablea中有相对较少的行。

答案 1 :(得分:0)

您应始终避免子查询,在大多数情况下,子查询的速度较慢。这应该更快:

select count(DISTINCT u.member_id) from database.tablea ua
left join database.tableb ub on
ua.member_id = ub.member_id
where ub.member_id is NULL