[英]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 BY
和PARTITION BY
之間的區別在於PARTITION BY
是內聯GROUP BY
因此這不會影響行數。 我喜歡在CTE中使用它,這是一個內聯視圖。 使其更清晰,並將您想要執行的不同步驟分開。 如果您移除TOP 1
您將看到我的意思。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.