0

我有两个表说 table_a 和 table_b 具有以下结构。

table_a:ID(主键),value_one

table_b:ID,value_two

请注意,table_b 中的 id 不是主要的,并且包含多个相同 id 的记录。

现在我想要第三个表,它显示 table_a 中每个 id 的记录,列是

id column_count

_count 列将显示 table_b 中 value_two = 'c' 的记录数(计数)。我想将此迭代到table_a的所有记录。

例如,假设我们的table_a是这样的:

id   value_one
1   20
2   40
3   50

table_b

id value_two
1   10
1   20
1   10
2   40
2   10
3   40
3   10

我想要 value_two = 10 的记录,所以我的新表看起来像

id   count
1   2
2   1
3   1

由于 id 1 有两条 value_two = 10 的记录,id 2 和 id 3 有一条 value_two = 10 的记录

4

2 回答 2

1

您可以进行条件聚合:

select id, sum(value_two = 10) as count
from table_b tb
group by id;

如果你想匹配ids 然后添加INNER JOIN. 这将在未找到时显示0计数。value_two = 10您可以添加 where 子句以仅查找value_two = 10计数。

于 2020-05-05T10:43:49.077 回答
1

一种方法是使用相关子查询:

select a.id,
       (select count(*) from table_b b where b.id = a.id and b.value_two = 10) as cnt_10
from table_a a;

另一种方法使用left join

select a.id, count(b.id)
from table_a a left join
     table_b b
     on b.id = a.id and b.value_two = 10
group by a.id;

在您的示例数据中,这有效:

select b.id, count(*)
from table_b b
where b.value_two = 10
group by b.id;

这在以下情况下是等效的:

  • 中的所有 ida都在b.
  • 所有 id 至少有一个值10.

如果这两个条件为真,则使用这个更简单的查询。

于 2020-05-05T11:20:14.123 回答