2017-01-18 11 views
0

私は2つのテーブルを持っています。それらを瓶やクッキーと呼んでください。クッキーには1つのjarがあり、jarには0つ以上のクッキーがあります。クッキーテーブルには、参照用のcookies.jar_idフィールドがあります。joinでcount()を取得するにはどうすればよいですか?

私が望むのは、各ジャーのクッキーの数をカウントした、クッキーを持つすべてのジャー(クッキーがゼロのジャーを除く)のリストです。

数百万のジャーと数百万のクッキーが存在する可能性があります。これはパフォーマンスに影響を受けます。 jarファイルの99%にはクッキーがありませんが、クッキーを持っているものは数百もあるので、空のjarファイルを除外し、すべてのクッキーに対して行を返さないようにする必要があります。

これは何らかの形で参加できますが、私は困惑しています。

+0

答えはイエス、 'GROUP BY' – Eric

答えて

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のインデックスが必要です。あなたが実際に

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 
+0

このResultSetのない「瓶」テーブル –

+3

を照会する必要はありませんを使用することです。しかし、次の質問はまた、瓶の名前を持つ方法もあります;-) – NineBerry

+0

その必要性についてはわかりませんが、とにかく実行計画はもっと複雑になり、実行に時間がかかります。彼は効率的なものを求めていた。 –

5

:より良いも、あなたが結果に瓶をテーブルから他の列を追加したい場合は、マックス()集計関数を使用する

をjars.jar_idするcookies.jar_idから外部キーを持っています唯一の「クッキー」テーブルを照会する必要があります。

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

「クッキーには1つのjarがあります」クッキー内のjar_idを暗示する必要があります。テーブルは常にヌルではありません – Eric

+1

jarによってクッキーがグループ化されます。 –

+0

私は間違っている、いい答え:-) –

関連する問題