ステップ1:キーワードを適切な関係(表)に分離します。
CREATE TABLE Keywords (KeywordID int IDENTITY(1,1) NOT NULL
, Keyword NVARCHAR(256)
, constraint KeywordsPK primary key (KeywordID)
, constraint KeywordsUnique unique (Keyword));
ステップ2:すべての多対多関係のように、会社とタグ間の多対多関係を別のテーブルにマップします。
CREATE TABLE CompanyKeywords (
CompanyID int not null
, KeywordID int not null
, constraint CompanyKeywords primary key (KeywordID, CompanyID)
, constraint CompanyKeyword_FK_Companies
foreign key (CompanyID)
references Companies(CompanyID)
, constraint CompanyKeyword_FK_Keywords
foreign key (KeywordID)
references Keywords (KeywordID));
ステップ3:単純なGROUP BYクエリを使用して、「クラウド」を生成します(たとえば、「クラウド」を最も一般的な100個のタグを意味します)。
with cte as (
SELECT TOP 100 KeywordID, count(*) as Count
FROM CompanyKeywords
group by KeywordID
order by count(*) desc)
select k.Keyword, c.Count
from cte c
join Keyword k on c.KeywordID = k.KeywordID;
ステップ4:結果はほとんど変更されず、計算コストが高くなるため、結果をキャッシュします。