我正在我的网站上进行比赛。每场比赛都可以有多个参赛作品如果只有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
答案 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;
答案 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的答案完全相同,但我想我还是会把它留下来,以显示我用于连接的略有不同的语法。