如何在连接中获得count()?

时间:2017-01-18 05:22:07

标签: sql

我有两张桌子。称他们为罐子和饼干。一个cookie有一个jar,一个jar有零个或多个cookie。 Cookie表有一个cookies.jar_id字段供参考。

我想要的是所有有饼干的罐子的列表(不包括没有饼干的罐子),每个罐子中的饼干数量。

可能有数百万个罐子和数百万个cookie,因此这对性能非常敏感。并且99%的罐子没有饼干,而那些有饼干的人可能有数百个,所以我真的需要排除空罐子而不是为每个饼干返回一行。

我确信这可以通过加入以某种方式完成,但我很难过。

2 个答案:

答案 0 :(得分:5)

您实际上只需查询'cookies'表:

Select jar_id, count(*) as NumberOfCookies
From cookies
Where jar_id is not null
Group by jar_id

答案 1 :(得分:4)

select jars.jar_id, count(*)
from jars
inner join cookies 
on cookies.jar_id = jars.jar_id
group by jars.jar_id

cookies.jar_id上应该有一个索引。甚至更好的是从cookies.jar_id到jars.jar_id

的外键

如果要将jars表中的其他列添加到结果中,请使用Max()聚合函数:

select jars.jar_id, Max(jars.jar_name), count(*)
from jars
inner join cookies 
on cookies.jar_id = jars.jar_id
group by jars.jar_id