在MYSQL中,从一个表中选择行,其中的值和顺序与另一个表中的值和顺序相同

在MYSQL中,从一个表中选择行,其中的值和顺序与另一个表中的值和顺序相同,mysql,sql,Mysql,Sql,我有两张桌子: 职位: 和表决: post_id vote 2 2 1 5 3 1 1 3 我想通过“投票”表中的评级显示排名前10的帖子: 但是它是按邮政id排序的。我如何按总票数排序呢?如果您想按票数排序post中的前10项记录,请使用join和groupby: select p.* from post p join voting v on p.id = v.post_id group by p.id o

我有两张桌子:

职位:

和表决:

post_id  vote
2         2
1         5
3         1
1         3
我想通过“投票”表中的评级显示排名前10的帖子:


但是它是按邮政id排序的。我如何按总票数排序呢?

如果您想按票数排序
post
中的前10项记录,请使用
join
groupby

select p.*
from post p join
     voting v
     on p.id = v.post_id
group by p.id
order by count(*) desc
limit 10;

要获得实际投票,请在
选择中包括
count(*)

如果您希望通过投票获得
post
中的前10条记录,请使用
加入
分组方式

select p.*
from post p join
     voting v
     on p.id = v.post_id
group by p.id
order by count(*) desc
limit 10;

要获得实际投票,请在
选择中包括
count(*)

这可能是您需要的:

SELECT post.id, post.text FROM post
JOIN voting ON voting.post_id = post.id
GROUP BY post.id
ORDER BY AVG(vote) DESC
LIMIT 10
至少我认为按平均评级订购是有意义的。但当然,您可以按给定的总分订购:

SELECT post.id, post.text FROM post
JOIN voting ON voting.post_id = post.id
GROUP BY post.id
ORDER BY SUM(vote) DESC
LIMIT 10

也许这就是你需要的:

SELECT post.id, post.text FROM post
JOIN voting ON voting.post_id = post.id
GROUP BY post.id
ORDER BY AVG(vote) DESC
LIMIT 10
至少我认为按平均评级订购是有意义的。但当然,您可以按给定的总分订购:

SELECT post.id, post.text FROM post
JOIN voting ON voting.post_id = post.id
GROUP BY post.id
ORDER BY SUM(vote) DESC
LIMIT 10