2012-04-27 42 views
0

我想建立一個系統,其中有線程和職位。我正在嘗試獲取最受歡迎的線索(用戶可以點擊「喜歡」按鈕使其更受歡迎),並擁有最多的帖子。問題是要通過大多數帖子排序結果......然後通過喜歡帖子。T-SQL排序結果與計數()優先

因此,舉例來說,如果我有300發的帖子,和200只喜歡一個線程..而另一個線程已經得到了300個喜好和201個likes..I想選擇第二個帖子..

表結構概括地說:

topic: 
-------- 
topic_id 
liked 

comment: 
------- 
comment_id 
topic_id 

這是到目前爲止我的存儲過程:

dbo.Trends 

AS 
    SELECT TOP 1 title, COUNT(com.topic_id), COUNT(topc.user_id_liked) 
FROM comment AS com 
INNER JOIN topic AS topc ON com.topic_id=topc.topic_id 
GROUP BY com.topic_id, topc.user_id_liked,title 
ORDER BY COUNT(com.topic_id), COUNT(topc.user_id_liked) DESC 

我不知道如果我是對的,否則我將不得不結果控制流邏輯。我在主題表中放置topic_id,然後在order statement中的topic喜歡的列之前。希望topic_id的選擇/排序將優先。

已更新:查詢已更新。

+0

你使用的是什麼版本的sql-server? – Arion 2012-04-27 09:04:59

+0

@Dmitry Makovetskiyd - 你認爲'topic_id'優先。快速測試會告訴你,:) :) – 2012-04-27 09:05:37

+0

我正在使用visual studio 2010 ...我正在構建存儲過程..我沒有數據.. vs2010有sql express 2008(內置) – 2012-04-27 09:10:17

回答

2

我真的不知道你想要的。但也許這將幫助:

;WITH CTE 
AS 
(
    SELECT 
     COUNT(com.topic_id) OVER(PARTITION BY topc.liked) AS topicCount, 
     COUNT(com.liked) OVER(PARTITION BY topc.topic_id) AS likedCount, 
     title 
    FROM 
     commnet AS com 
     INNER JOIN topic AS topc 
      ON com.topic_id=topc.topic_id 
) 
SELECT TOP 1 
    CTE.title, 
    CTE.topicCount, 
    CTE.likedCount 
FROM 
    CTE 
ORDER BY 
    topicCount, 
    likedCount 

編輯

GROUP BYPARTITION BY之間的差異是PARTITION BY是直列GROUP BY所以這不會影響的行數。我喜歡在CTE中使用它,這是一個內聯視圖。使它更清晰,並分開你想要做的不同步驟。如果你刪除了TOP 1,你會明白我的意思。

+0

大聲笑..這似乎是我的聲明..我使用了分組,並使用分區...有什麼區別? – 2012-04-27 09:18:32

+1

更新了答案。我希望它回答你的問題 – Arion 2012-04-27 09:30:04