MySQL检查MAX值是否重复

时间:2013-01-10 07:17:17

标签: mysql sql select

我正在我的网站上进行比赛。每场比赛都可以有多个参赛作品如果只有MAX的投票值有重复,我想检索。

表格如下:

contest_id    entry_id    votes
1             1           50
1             2           34
1             3           50
2             4           20
2             5           55
3             6           53

我只需要查询就可以告诉我比赛1的MAX值是重复的,没有其他信息。

我尝试了这个但是没有用:

SELECT MAX(votes) from contest group by contest_id having count(votes) > 1

3 个答案:

答案 0 :(得分:5)

这会找到每个竞赛的最大投票价值,并计算具有该投票数的条目。 然后它会显示多个匹配的比赛。

SELECT contest_id
FROM contests
WHERE votes=(
  SELECT MAX(votes) FROM contests c WHERE c.contest_id=contests.contest_id
)
GROUP BY contest_id
HAVING COUNT(*) > 1;

SQLfiddle for testing

答案 1 :(得分:5)

SELECT  a.contest_ID
FROM    contest a
        INNER JOIN
        (
          SELECT contest_id, MAX(votes) totalVotes
          FROM contest
          GROUP BY contest_id
        ) b ON a.contest_ID = b.contest_ID AND
               a.votes = b.totalvotes
GROUP BY a.contest_ID
HAVING COUNT(*) >= 2

答案 2 :(得分:0)

您可以首先选择子查询中每个竞赛ID的最大投票数,然后加入结果(demo on SQLFiddle):

SELECT contest_id, votes
FROM contest
  JOIN (
    SELECT contest_id, MAX(votes) AS votes
    FROM contest GROUP BY contest_id
  ) AS foo USING (contest_id, votes)
GROUP BY contest_id
HAVING COUNT(*) > 1

这样做的好处是它是一个独立的子查询,因此MySQL只需要擦一次。

聚苯乙烯。是的,这基本上与JW的答案完全相同,但我想我还是会把它留下来,以显示我用于连接的略有不同的语法。