簡體   English   中英

T-Sql排序結果以count()為優先級

[英]T-Sql ordering results with count() by priority

我正在嘗試構建一個具有線程和帖子的系統。 我正在嘗試獲取最受歡迎的線程(用戶可以單擊“喜歡”按鈕以使其更受歡迎)並且擁有大多數帖子。 問題是按大多數帖子排序結果......然后按喜歡的帖子排序。

所以例如,如果我有一個帖子有300個帖子,200個喜歡..而另一個帖子有300個喜歡和201個喜歡..我想要第二個帖子被選中..

表結構簡而言之:

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

我不確定我是對的,還是我必須要控制流邏輯。 我在order語句中的topic likes列之前放置了topic_id來自topic表。希望topic_id的選擇/排序將占優勢。

更新:查詢已更新。

我真的不知道你想要什么。 但也許這會有所幫助:

;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您將看到我的意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM