Oracle SQL:使用count将两个查询连接到一个结果集中,并按by分组

问题描述

  • 我有两个表可供选择和联接。
  • 两者共享相应的键值。
  • 第二个表的select语句应为count()和by()值分组。

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

表一

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

表二

| 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语句中获得此最佳方法是什么? 我想我应该使用两个子选择并将其合并。不知道怎么 放入count(),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子句可以方便地从table1中选择所有列,而不必列出所有列。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...