2013-01-10 55 views
2

我正在我的网站上运行比赛。每场比赛可以有多个参赛作品。我想检索如果只有最大值的选票有重复。MySQL检查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有没有附加信息的重复最大值。

我试过,但没有奏效:

SELECT MAX(votes) from contest group by contest_id having count(votes) > 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 
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

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只需要擦一次。

Ps。是的,这与JW的答案基本相同,但我想我会保留它以显示我用于连接的略有不同的语法。