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