我有一个棘手的问题(至少对我来说这很棘手),我想通过评论计数来安排数据。我的第一个表叫做all_comments
,它有这些列(更多但不是必需的):
comment, target_id
我的第二个表名为our_videos
,其中包含以下列(更多但不是必需的):
id, title
我想得到所有注释的计数,这些注释的target_id与第二个表上的id相同,并按注释计数排列数据。这是我想要的例子:
表#1:
id target_id
----------------
1 3
2 5
3 5
4 3
5 3
表#2:
id title
-----------
1 "test"
2 "another-test"
3 "testing"
5 "......"
这基本上是说数据,即在第二个数据库中,id为3有3个注释,id为5的数据有2个注释,我想通过这个注释计数排列数据,得到结果像这样:
结果:
id title
----------------
3 "testing"
5 "......."
1 "test"
2 "another-test"
如果我错过了这个问题所需的任何重要信息,请询问,感谢您的帮助,和平:)
答案 0 :(得分:2)
这是非常简单的查询,你一定要查看任何sql教程
天真的变体将是:
select videos.id, videos.title, count(*) as comment_count
from videos
left outer join
comments
on (videos.id = comments.target_id)
group by videos.id, videos.title
order by comment_count desc
这个版本有一些性能问题,因为你必须按名称分组,为了加快它我们通常做下一件事:
select videos.id, videos.title, q.cnt as comment_count
from videos
left outer join
(
select target_id, count(*)
from comments
group by target_id
) as q
on videos.id = q.target_id
order by q.cnt DESC
答案 1 :(得分:0)
select videos.id, videos.title, isnull(cnt, 0) as cnt
from videos
left outer join
(select target_id, count(*) as cnt
from comments
group by target_id) as cnts
on videos.id = cnts.target_Id
order by isnull(cnt, 0) desc, videos.title
答案 2 :(得分:0)
有些系统会让你写这个,即使排序不严格应该发生在输出中没有包含的列上。我不一定会推荐它,但我认为它是最直接的。
select id, title from videos
order by (select count(*) from comments where target_id = videos.id) desc, title
如果您不介意在输出中使用它,那么这是一个快速的变化:
select id, title from videos,
(select count(*) from comments where target_id = videos.id) as comment_count
order by comment_count desc, title
SQL通常有很多选项。