从计数中查找最大值而不使用最大值

时间:2013-04-09 08:27:25

标签: sql

我有

Voters(name,vote, score,time)

名称是主键并投票选民投票的人的身份证。 1个人可以多次投票。

我必须找到投票次数最多的人的名字。 {Maximum Count(vote)}不使用max命令。

3 个答案:

答案 0 :(得分:3)

如果您可以使用count(),请尝试按顺序排序结果。在MySQL中,您的查询可能看起来像

SELECT name, COUNT(vote) AS total_votes
FROM Voters
GROUP BY name
ORDER BY total_votes DESC
LIMIT 1

这将使投票次数最多的人返回其投票数。

答案 1 :(得分:1)

您可以使用关系代数中的概念。当多个用户拥有相同的投票数时,limit 1没有给出好的结果。

On PostgreSQL:

with t as (select name, count(*) c from voters group by name)
SELECT t.* from t
except
SELECT t.* from t JOIN t t2 ON t2.c > t.c

Example on SQL Fiddle

示例数据证明了这一点:

create table voters (name int,vote int);

insert into voters values (1,1);
insert into voters values (1,1);
insert into voters values (1,1);
insert into voters values (1,1);
insert into voters values (1,1);
insert into voters values (1,1);
insert into voters values (1,1);
insert into voters values (1,1);
insert into voters values (2,1);
insert into voters values (2,1);
insert into voters values (2,1);
insert into voters values (2,1);
insert into voters values (2,1);
insert into voters values (2,1);
insert into voters values (2,1);
insert into voters values (2,1);
insert into voters values (2,1);
insert into voters values (3,1);
insert into voters values (3,1);
insert into voters values (3,1);
insert into voters values (3,1);
insert into voters values (3,1);
insert into voters values (3,1);
insert into voters values (3,1);
insert into voters values (3,1);
insert into voters values (3,1);
insert into voters values (4,1);
insert into voters values (4,1);
insert into voters values (4,1);
insert into voters values (4,1);
insert into voters values (4,1);
insert into voters values (5,1);
insert into voters values (5,1);
insert into voters values (5,1);
insert into voters values (5,1);

我的解决方案基于对此问题的回答:How can I find MAX with relational algebra?

在另一个答案Aggregate Relational Algebra (Maximum)

中,对这个概念也有很好的解释

答案 2 :(得分:0)

试用

select count(*) from table where vote=(select max(count(*)) from table) group by vote

希望这会对你有所帮助。