に与えられていない列を含めるは、効率的にSQLのグループによってクエリー
表
Id INTEGER
Name VARCHAR(50)
表B Iは、各FkId
値のoccurrancesをカウントしたい
Id INTEGER
FkId INTEGER ; Foreign key to Table A
:
SELECT FkId, COUNT(FkId)
FROM B
GROUP BY FkId
ここでは、単に名前をTable A
から出力したいだけです。
これは動作しません。
SELECT FkId, COUNT(FkId), a.Name
FROM B b
INNER JOIN A a ON a.Id=b.FkId
GROUP BY FkId
a.Name
ためには、(is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause
エラーが発生します)GROUP BY
句に含まれていません。
点は、そのエラーメッセージが、いくつかの例のためのようにかなりの数のマッチがあり、この
FkId Count Name
1 42 Ronald
2 22 John
ように出力するように、この
FkId Count
1 42
2 25
ような出力から移動させることですhttps://stackoverflow.com/a/6456944/141172には、「1ではなくテーブルに3つのスキャンが生成されるため、拡大縮小されません」というコメントがあります。クエリ出力で:
にはどうすれば効率的には(FkId
から1関係1を持っている)に入社Table B
からフィールドを含めることができますか?
サンプルデータと希望の結果を表示できますか? FkIdごとに複数の固有の名前が存在するかどうかを理解するのは苦労しています。 –
FkIdごとに一意の名前が1つしかありません。ポイントは、FkIdの横に名前を表示するだけなので、結果を見ているユーザーは「Person 1が42回出現しました」と表示されず、「Ronaldという名前のPerson 1が42回出現しました」と表示されます。 –
名前をグループに追加するだけではどうですか? –