我目前正在开展一个投票系统项目。我有一个名为“dbName”的mysql数据库 字段
`for table "pospresident"
---------------|-------------|---------------- \n
idCandidate | NumOfVote | CandidateName \n
---------------|-------------|---------------- \n
1 | 20 | Joe
2 | 30 | Carlo
---------------+-------------+----------------
for table "posvpres"
---------------|-------------|----------------
idCandidate | NumOfVote | CandidateName
---------------|-------------|----------------
1 | 15 | Anne
2 | 35 | Lucas
---------------+-------------+----------------
and so on ...
`
我只想显示获得最高票数的不同表中候选人的所有姓名。我只需要了解我的SELECT查询应该如何。
答案 0 :(得分:0)
使用UNION ALL
从两个表中获取数据,然后将GROUP BY
与SUM
和HAVING
一起使用,只获得具有MAX
的候选人票。像这样:
SELECT
idCandidate,
CandidateName,
SUM(NumOfVote) Votes
FROM
(
SELECT *
FROM pospresident p
UNION ALL
SELECT *
FROM posvpres v
) AS t
GROUP BY idCandidate, CandidateName
HAVING SUM(NumOfVote) = (SELECT MAX(NumOfVote)
FROM
(
SELECT NumOfVote FROM posvpres
UNION ALL
SELECT NumOfVote FROM pospresident
) t);
这会给你:
| IDCANDIDATE | CANDIDATENAME | VOTES |
---------------------------------------
| 2 | Lucas | 35 |
答案 1 :(得分:0)
如果我理解正确,您需要单独从每个表中进行选择。尝试这样的事情:
SELECT idCandidate,
CandidateName
FROM pospresident
WHERE NumOfVote = (SELECT MAX(NumOfVote) FROM pospresident)
使用Mahmoud提供的小提琴:http://www.sqlfiddle.com/#!2/b3c82/4
祝你好运。