2

如果我想这样做,我应该怎么做:

目前,有A表和B表,

A:
id, name, address            //the id is unique
B
id, contact, email

由于一个人可能有多个联系人和邮箱,或者没有联系人和邮箱(即表B中没有记录)

现在我想计算每个 id 有多少条记录,甚至是 0: 结果将如下所示:

id, name, contact_email_total_count

我该怎么做(目前我唯一不知道的地方是如何计算 0 记录,因为表 B 中没有记录)?

4

2 回答 2

2

对于这种情况,您将需要使用 a LEFT JOIN,然后添加一个聚合和 a GROUP BY

select a.id, 
  a.name, 
  count(b.id) as contact_email_total_count
from tablea a
left join tableb b
  on a.id = b.id
group by a.id, a.name

请参阅带有演示的 SQL Fiddle

如果您在学习连接语法时需要帮助,这里有一个很好的连接可视化解释

根据您的评论,典型的执行顺序如下:

  1. 加入
  2. 在哪里
  3. 通过...分组
  4. 拥有
  5. 选择
  6. 订购方式
于 2013-01-10T18:07:48.870 回答
0

无论B如何,都需要进行左连接以维护表A中的记录:

PostgreSQL:左外连接语法

需要汇总 B 中的记录数:

PostgreSQL GROUP BY 与 MySQL 不同?

于 2013-01-10T18:11:30.983 回答