我正在尝试优化查询,并将其归结为类似的内容,
select a.* from
(select id, count(oid) as cnt from stuff1 s1 inner join stuff2 s2 on s1.id=s2.id group by id) as a
right join
(select id,'0' as cnt from stuff2) as b
on a.id = b.id
基本上,目标是获得每个oid的计数,其中包括0计数的那些。我之前有一个查询工作正常,但执行时间为30秒。我希望用这个优化旧查询,但我从表b获得NULL值。我需要表b中的值显示id和0.任何帮助都将非常感激。
数据集的一个例子可以是,
Stuff1
| oid | id |
|---- |----|
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
Stuff2
| id |
|----|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
查询应该生成
| id | cnt |
|----|-----|
| 1 | 2 |
| 2 | 1 |
| 3 | 1 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
答案 0 :(得分:2)
您的查询在语法上不正确(oid
可能未定义; id
中的select
不明确。但是,我怀疑你想要一个简单的left join
:
select s2.id, count(s1.id) as cnt
from stuff2 s2 left join
stuff1 s1
on s1.id = s2.id
group by s2.id;