0

我正在尝试构建一个具有线程和帖子的系统。我正在尝试获取最受欢迎的线程(用户可以单击“喜欢”按钮使其更受欢迎)并且帖子最多。问题是按大多数帖子排序结果..然后按喜欢的帖子排序。

例如,如果我有一个帖子有 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

我不确定我是否正确,或者我是否必须控制流逻辑。我将主题表中的 topic_id 放在 order 语句中的 topic like 列之前。希望 topic_id 的选择/排序优先。

更新:查询已更新。

4

1 回答 1

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 BY和之间的区别在于PARTITION BYPARTITION BY是内联的GROUP BY,因此这不会影响行数。我喜欢在作为内联视图的 CTE 中使用它。使其更清晰,您可以将要执行的不同步骤分开。如果你删除TOP 1你会明白我的意思。

于 2012-04-27T09:13:28.127 回答