如何解决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
中选择所有列,而不必列出所有列。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。