首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用join查询计算此表的获胜者

如何使用join查询计算此表的获胜者
EN

Stack Overflow用户
提问于 2014-04-12 21:47:06
回答 2查看 91关注 0票数 0
代码语言:javascript
复制
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这个数据库中统计获胜者

EN

回答 2

Stack Overflow用户

发布于 2014-04-12 21:53:20

代码语言:javascript
复制
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

这将给出获胜者。

如果你想按顺序列出它们,也就是从上到下,使用如下命令

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2014-04-12 21:56:30

假设有两个人有相同的选票,那么在这种情况下就会有两个赢家,你可以这样做

代码语言:javascript
复制
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技术

Fiddle demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23031202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档