Oracle SQL:使用 count() 和 group by() 将两个查询连接到一个结果集中

Oracle SQL: Join two queries into one result set using count() and group by()

一个例子和预期结果说明情况:

Table一个

| id  | rev | colour |
| --- | --- | ------ |
| 1   | a   | blue   |
| 2   | a   | green  |
| 1   | b   | grey   |

Table两个

| id  | rev | note     |
| --- | --- | -------- |
| 1   | a   | rejected |
| 1   | a   | removed  |
| 1   | b   | rejected |
| 1   | b   | rejected |
| 2   | a   | removed  |
| 2   | a   | removed  |

预期结果集的伪SQL

t1.id、t1.rev、t1.colour、t2.count(拒绝)、t2.count(删除)

预期结果

| id  | rev | colour | rejected | removed |
| --- | --- | ------ | -------- | ------- |
| 1   | a   | blue   | 1        | 1       |
| 2   | a   | green  | 0        | 2       |
| 1   | b   | grey   | 2        | 0       |

在一个 SQL 语句中获得此信息的最佳方法是什么? 我想我应该使用两个 sub-selects 并加入它们。不知道怎么办 放入 count()、group by() 并加入此处。

谢谢你的想法!

我认为您只需要聚合和 join。我会这样处理:

select *
from table1 t1 left join
     (select id, rev,
             sum(case when note = 'rejected' then 1 else 0 end) as rejected,
             sum(case when note = 'removed' then 1 else 0 end) as removed
      from table2 t2
      group by id, rev
     ) t2
     using (id, rev);

在子查询中进行聚合并使用 using 子句可以方便地 select 来自 table1 的所有列,而不必列出所有列。