SQL函数按大多数热门内容排序

时间:2010-02-05 19:01:49

标签: sql

我不知道SQL是否可以实现: 我有两个表,一个是内容,每个都有一个整数ID,还有一个注释表,每个表都有一个“On”字段,表示它所在的内容。我希望按照“On”字段中有多少条评论的内容接收内容,并希望SQL能够做到。

3 个答案:

答案 0 :(得分:5)

SELECT   comment.on AS content_id, COUNT(comment_id) AS num_comments
FROM     comments
GROUP BY content_id
ORDER BY num_comments DESC

如果您需要内容的所有字段,可以进行加入:

SELECT   contents.*, COUNT(comment_id) AS num_comments
FROM     contents
  LEFT JOIN comments on contents.content_id = comments.on
GROUP BY content_id
ORDER BY num_comments DESC

答案 1 :(得分:0)

select c.id, count(cmt.*) as cnt
    from  Content c, Comment cmt
where c.id = cmt.id
order by cnt
group by c.id,

答案 2 :(得分:0)

让我们假设您的表看起来像这样(我在伪SQL中写这个 - 语法可能因您使用的数据库而异)。根据您提供的说明,您不清楚如何加入表格。不过,我认为它看起来像这样(需要注意的是所有主键,索引等都缺失了):

CREATE TABLE [dbo].[Content] (
    [ContentID] [int] NOT NULL,
    [ContentText] [varchar](50) NOT NULL
)

CREATE TABLE [dbo].[ContentComments] (
    [ContentCommentID] [int] NOT NULL,
    [ContentCommentText] [varchar](50) NOT NULL,
    [ContentID] [int] NOT NULL
)

ALTER TABLE [dbo].[ContentComments]  WITH CHECK ADD  CONSTRAINT
[FK_ContentComments_Content] FOREIGN KEY([ContentID])
REFERENCES [dbo].[Content] ([ContentID])

以下是编写查询的方法,以便按照每条内容的注释数量对内容进行排序。 DESC将评论最多的内容项目排序到评论最少的内容项目。

SELECT Content.ContentID, COUNT(ContentComments.ContentCommentID) AS CommentCount
FROM Content
INNER JOIN ContentComments
ON Content.ContentID = ContentComments.ContentID
GROUP BY Content.ContentID
ORDER BY COUNT(ContentComments.ContentCommentID) DESC