SELECT PageId, SUM([Match]) as [Match], SUM([Weight]) as [Weight], SUM([Score]) as [Score] FROM ( SELECT T.PageId, COUNT(DISTINCT T.Token) / (@TokenCount + 0.0) as [Match], SUM(T.[Weight] * 1.5) as [Weight], --Extra weight on score for exact matches: SUM(T.[Weight] * 1.5) * (COUNT(DISTINCT T.Token) / (@TokenCount + 0.0)) as [Score] FROM PageToken as T INNER JOIN TempSearchTerms as ST ON ST.Token = T.Token GROUP BY T.PageId ) as T GROUP BY T.PageId HAVING SUM(Score) >= @MinimumMatchScore ORDER BY SUM([Score]) DESC LIMIT 250;