2

我正在我的网站上举办比赛。每场比赛都可以有多个参赛作品。如果只有投票的 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
4

3 回答 3

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

于 2013-01-10T07:22:57.143 回答
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
于 2013-01-10T07:24:27.347 回答
0

您可以通过首先在子查询中为每个竞赛 ID 选择最大票数,然后加入结果(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 的答案基本相同,但我想我还是会保留它以显示我用于连接的略有不同的语法。

于 2013-01-10T07:33:24.450 回答