优先考虑SQL stmt中的值

时间:2011-05-17 10:10:20

标签: sql

有什么方法可以我做一个查询来指定我想优先考虑一些值?

例如我有:

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

我希望在找到结果时给予'算法'更高的优先级。任何想法?

2 个答案:

答案 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