我有一些这样设置的表:
表past_elections
:
election_ID bigint(15) unsigned;
Date date;
Race varchar(32)
表
candidates
:Candidate_ID bigint(15) unsigned;
FirstName varchar(60);
LastName varchar(60)
表
past_elections-candidates
:PastElection bigint(15);
Candidate bigint(15);
Votes int(8) unsigned
past_elections-candidates
是一个中间表,该表将候选人表中Candidate_ID的主键与past_elections表中的lection_ID链接起来,因此我进行了设置,因为从技术上讲,候选人可以在候选人表中并可以运行多个参加同一选举(考虑部分任期限制或他们也想保留下一个任期的特别选举)或在另一年竞选连任。这就是为什么我建立了一对多的关系。我的问题是,如何在数据库中查询所有种族的获胜者?怎样查询哪些人以不到总选票的X百分比赢得选举?我知道我可能必须使用
MAX()
之类的聚合函数以及INNER JOIN
和GROUP BY
,但这似乎很复杂。我希望有人以前做过相同或相似的事情。尽管可能会告诉我我以这种查询可能的最无效率的方式来建立表。 (交叉手指。) 最佳答案
要获得任何赛事的获胜者,您需要找到每次选举的最高票数,然后将其重新加入past_elections-candidates
表以找到候选人编号,然后加入候选人表以获取详细信息:
SELECT pe.election_ID as elec,
c.FirstName,
c.LastName,
pecs.max_votes AS votes,
pecs.max_votes / pecs.total_votes AS percent
FROM past_elections pe
JOIN `past_elections-candidates` pec ON pec.PastElection = pe.election_ID
JOIN (SELECT PastElection,
MAX(Votes) AS max_votes,
SUM(Votes) AS total_votes
FROM `past_elections-candidates`
GROUP BY PastElection) pecs ON pecs.PastElection = pec.PastElection AND pecs.max_votes = pec.votes
JOIN candidates c ON c.Candidate_ID = pec.Candidate
输出:
elec FirstName LastName votes percent
1 Aladdin Arabia 200 0.5714
2 Robin Hood 150 0.4286
Demo on dbfiddle
关于mysql - 在SQL数据库上进行复杂查询以赢得选举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58600666/