2011-05-17 128 views
1

有沒有什麼辦法可以做一個查詢來指定我想優先考慮某個值?優先考慮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 

我想,查詢結果時,「算法」被賦予較高的優先級。有任何想法嗎?

+0

順序按類別只需訂購? – 2011-05-17 10:14:44

+0

我想,給予算法優先權就是一個例子。如果「k-means」應該成爲優先級 – 2011-05-17 10:20:58

+0

@ Neil,我會按類別排序,但只是按字母順序排列不排序? – michelle 2011-05-17 12:07:37

回答

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 

但這只是給你一個想法的一個例子。

UPDATE:繼你對此有何評論,你可以生成一個case語句是這樣的:

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

+0

而不是隻有算法第一,我希望我指定標籤的順序將是檢索結果的優先事項。這可能嗎? – michelle 2011-05-17 12:03:44

+0

有沒有一種方法可以限制我用一個標籤獲得的網站數量,例如..如果我只想要前20名,前20個是所有算法,但我仍然需要一個混合例如。算法的前3名,前3名的k-means ..如果這是可能的,這將是非常理想的,我需要 – michelle 2011-05-17 12:23:55

+1

,可以用'UNION'實現:'(SELECT TOP(3).. WHERE Category = 'algorithm')UNION ALL(SELECT TOP(3).. WHERE Category ='k-means')ORDER BY ..'。 – 2011-05-17 12:26:12

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) 

謝謝你給我的想法盧卡斯埃德爾