2013-01-10 52 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的答案基本相同,但我想我會保留它以顯示我用於連接的略有不同的語法。