-1

私はこのクエリを持っています:

select Keyword, Keywords.QuoteId, count(*) AS TotalTags 
from [QuotesTemple].[dbo].Keywords 
join [QuotesTemple].[dbo].QuoteImages 
ON QuoteImages.QuoteId=Keywords.QuoteId
group by Keyword, Keywords.QuoteId

結合を追加する前に、TotalTags が常に 1 であることを除いて、クエリは機能します。

TotalTags=5 を持つべきキーワードの場合、カウント 1 でキーワードを 5 回表示します。

グループから削除するとKeywords.QuoteId、クエリはエラーを返します。

4

3 に答える 3

1

グループ化に追加の列を追加したので、任意のキーワードに 5 つの一意の引用符がある場合、もちろん各組み合わせのカウントは 1 になります。試してください:

select k.Keyword, k.QuoteId, 
  count(*) OVER (PARTITION BY k.Keyword) AS TotalTags 
from [enter_your_database_name_here].[dbo].Keywords AS k
INNER JOIN [enter_your_database_name_here].[dbo].QuoteImages AS q
ON k.QuoteId = q.QuoteId
group by k.Keyword, k.QuoteId;

各 の行を表示したくない場合はQuoteIdSELECTリストとGROUP BY. また、結合をまったく気にしない場合もあります。ギャンブルをして、パフォーマンスをわずかに向上させてみませんか (または、最悪の場合、同じ):

SELECT k.Keyword, COUNT(*) AS TotalTags
FROM [enter_your_database_name_here_if_you_want_to
  run_from_another_database_for_some_reason].dbo.Keywords AS k
WHERE EXISTS
(
  SELECT 1 FROM [enter_your_database_name_here_if_you_want_to
  run_from_another_database_for_some_reason].dbo.QuoteImages
  WHERE QuoteID = k.QuoteID
)
GROUP BY k.Keyword;

個々の見積もりを気にしない場合は、なぜ追加したのかわかりません。エラーが発生したとのことですが、これは SELECT リストのみに追加したためですか、それとも GROUP BY リストのみに追加したためですか? なぜあなたはそれをどちらかのリストに紹介するのですか?

于 2013-03-30T20:28:27.037 に答える
0

joinを に置き換えるとどうなりますかleft outer join:

select Keyword, Keywords.QuoteId, count(*) AS TotalTags 
from [QuotesTemple].[dbo].Keywords 
left outer join [QuotesTemple].[dbo].QuoteImages 
ON QuoteImages.QuoteId=Keywords.QuoteId
group by Keyword, Keywords.QuoteId

二つのことが考えられます。1 つはkeywords.QuoteId、結合を追加したときに追加したことです。そして、引用ごとに 1 つのタグがあります。

もう 1 つは、一部のキーワードのみに引用符が付けられていることです。

于 2013-03-30T13:09:38.647 に答える