1

我目前正在研究投票系统项目。我有一个名为“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 查询应该如何的想法。

4

2 回答 2

0

用于UNION ALL从两个表中获取数据,然后使用GROUP BYwithSUMHAVING仅获取有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);

SQL 小提琴演示

这会给你:

| IDCANDIDATE | CANDIDATENAME | VOTES |
---------------------------------------
|           2 |         Lucas |    35 |
于 2013-02-04T09:38:35.467 回答
0

如果我对您的理解正确,您想分别从每个表中进行选择。尝试这样的事情:

SELECT idCandidate, 
   CandidateName 
FROM pospresident 
WHERE NumOfVote = (SELECT MAX(NumOfVote) FROM pospresident)

并使用 Mahmoud 提供的小提琴:http ://www.sqlfiddle.com/#!2/b3c82/4

祝你好运。

于 2013-02-04T09:45:05.677 回答