从组中选择最大限制1

Pat*_*tec 7 sql-server group-by max limit

我正在制作一个网页缓存系统.我想制作一个简单的页面排名系统和输出.问题是,我想显示每个唯一域具有最高相关性得分的记录集.一个域可能有多个记录,但具有不同的标题,描述等.问题是,它不是获得包含唯一域的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;
Run Code Online (Sandbox Code Playgroud)

我越来越:

domain1 title html
domain1 title html
domain1 title html
domain2 title html
domain2 title html
domain2 title html
Run Code Online (Sandbox Code Playgroud)

我想要的是

domain1 title html
domain2 title html
domain3 title html
domain4 title html
domain5 title html
Run Code Online (Sandbox Code Playgroud)

Eri*_*son 2

我不确定为什么你的代码可以工作,因为我认为你应该有

ORDER BY 总和(相关性) DESC

代替

按相关性 DESC 排序

也许这就是问题所在?

除此之外,还有这个呢。它很丑陋,但它会起作用。如果 SQL Server 了解如何稍后在查询中引用别名,那就更好了。可惜。

选择标题、html、
Case When title LIKE '%about%' then 10 Else 0 End +
Case When html LIKE '%about%' then 7 Else 0 End +
Case When keywords LIKE '%about%' then 5 Else 0 End +
Case When 描述 LIKE '%about%' then 2 Else 0 End AS 相关性
从页面
WHERE Case When title LIKE '%about%' then 10 Else 0 End +
Case When html LIKE '%about%' then 7 Else 0 End +
Case When keywords LIKE '%about%' then 5 Else 0 End +
案例 当描述 LIKE '%about%' then 2 Else 0 End > 0
ORDER BY Case When title LIKE '%about%' then 10 Else 0 End +
Case When html LIKE '%about%' then 7 Else 0 End +
Case When keywords LIKE '%about%' then 5 Else 0 End +
Case When description LIKE '%about%' then 2 Else 0 End DESC;

或者也许只是稍微重新安排一下:

选择标题、html、相关性
FROM(选择标题,html,
Case When title LIKE '%about%' then 10 Else 0 End +
Case When html LIKE '%about%' then 7 Else 0 End +
Case When keywords LIKE '%about%' then 5 Else 0 End +
Case When 描述 LIKE '%about%' then 2 Else 0 End AS 相关性
从页)
其中相关性 > 0
按相关性 DESC 排序;