我正在制作一个网页缓存系统。我想做一个简单的页面排名系统和输出。问题是,我想显示每个唯一域的相关性分数最高的记录集。一个域可能有多个记录,但具有不同的标题,描述等。问题是,不是获取包含唯一域的1个记录集,而是将该唯一域的所有记录集分组并将其全部输出。我只是想,每组每唯一的域的最高相关性得分记录其输出先下一(相关性最高和不同的领域为该组)从组中选择最大限制1
SELECT title, html, sum(relevance) FROM
(
SELECT title, html, 10 AS relevance FROM page WHERE title like ‘%about%’ UNION
SELECT title, html, 7 AS relevance FROM page WHERE html like ‘%about%’ UNION
SELECT title, html, 5 AS relevance FROM page WHERE keywords like ‘%about%’ UNION
SELECT title, html, 2 AS relevance FROM page WHERE description like ‘%about%’
) results
GROUP BY title, html
ORDER BY relevance desc;
我越来越:
domain1 title html
domain1 title html
domain1 title html
domain2 title html
domain2 title html
domain2 title html
我要的是
domain1 title html
domain2 title html
domain3 title html
domain4 title html
domain5 title html
无论我采用哪种方式,我都会收到无效列'相关性' – Patriotec 2010-07-26 03:44:30
@kinjite:这是因为'相关性'是列别名,在WHERE子句中引用。 SQL Server支持在GROUP BY中引用列别名,但不支持WHERE – 2010-07-26 04:19:01
@OMG Ponies:或ORDER BY,如果我正确记得。我编辑了答案来解决这个问题。这非常丑陋,但它会起作用。我之前使用过这种黑客技术。 – 2010-07-26 11:30:40