有什么方法可以我做一个查询来指定我想优先考虑一些值?
例如我有:
SELECT TOP (20)
r.MD5, r.Title, r.Link, t.Category, t.tfidf, COUNT(r.MD5) AS matching_terms
FROM
Resource AS r INNER JOIN tags AS t ON r.MD5 = t.MD5
WHERE
(t.Category IN ('algorithm', 'k-means', 'statistics', 'clustering', 'science'))
GROUP BY r.MD5, r.Title, r.Link, t.Category, t.tfidf
ORDER BY matching_terms DESC, t.tfidf DESC
我希望在找到结果时给予'算法'更高的优先级。任何想法?
答案 0 :(得分:2)
我不确定您想要优先级'algorithm'
有多高,但无论如何,您可以将其添加到ORDER BY
子句中,以使其成为最重要的类别(所有其他类别同样重要):
ORDER BY ..., CASE t.Category = 'algorithm' THEN 0 ELSE 1 END, ...
但是,如果您的“优先级”概念在某种程度上与matching_terms
表达式的重要性相关联,那么您也可以尝试这样的事情(您必须嵌套上面的选择)
SELECT TOP(20) FROM (
[your original select without TOP(20) clause]
)
ORDER BY (matching_terms * CASE t.Category = 'algorithm'
THEN 1.5 ELSE 1 END) DESC, t.tfidf DESC
但这只是一个给你一个想法的例子。
更新:在您发表评论后,您可以生成如下的案例陈述:
ORDER BY CASE t.Category WHEN 'algorithm' THEN 0
WHEN 'k-means' THEN 1
WHEN 'statistics' THEN 2
WHEN 'clustering' THEN 3
WHEN 'science' THEN 4 END
或者(特别是如果您的类别列表很大),那么您应该向包含优先级的标记添加sort
字段。然后你可以按sort
答案 1 :(得分:0)
SELECT TOP (10) r.MD5, r.Title, r.Link, t.Category, t.tfidf, COUNT(r.MD5) AS matching_terms
FROM Resource AS r INNER JOIN
tags AS t ON r.MD5 = t.MD5
WHERE (t.Category IN ('astrophysics', 'athletics', 'sports', 'football', 'soccer'))
GROUP BY r.MD5, r.Title, r.Link, t.Category, t.tfidf
ORDER BY (CASE t .Category WHEN 'astrophysics' THEN 0 WHEN 'athletics' THEN 1 WHEN 'sports' THEN 2 WHEN 'football' THEN 3 WHEN 'soccer' THEN 4 END)
感谢你给我一个想法Lukas Eder