candidate table
---------------------------
Id Name
1 James
2 peter
3 robin
4 max
vote table
-----------------------
vote candidate id
1 1
1 1
1 1
1 2
1 3
1 3
1 2如何在mysql ....by这个数据库中统计获胜者
发布于 2014-04-12 21:53:20
select
c.name,
sum(v.vote) as total_votes
from candidate c
inner join vote v on v.candidate_id = c.Id
group by c.Id
order by total_votes desc limit 1这将给出获胜者。
如果你想按顺序列出它们,也就是从上到下,使用如下命令
select
c.name,
sum(v.vote) as total_votes
from candidate c
inner join vote v on v.candidate_id = c.Id
group by c.Id
order by total_votes desc发布于 2014-04-12 21:56:30
假设有两个人有相同的选票,那么在这种情况下就会有两个赢家,你可以这样做
SELECT c.*,
COUNT(*) `votes`,
t.votes_total
FROM candidate c
LEFT JOIN vote v ON(v.candidate_id = c.id)
JOIN (SELECT COUNT(*) votes_total FROM vote
GROUP BY candidate_id
ORDER BY votes_total DESC
LIMIT 1) t
GROUP BY c.id
HAVING votes=t.votes_total
ORDER BY votes DESC否则,如果您不关心多个赢家,那么您可以使用由Abhik Chakraborty提供的ORDER BY with LIMIT技术
https://stackoverflow.com/questions/23031202
复制相似问题