有投票表中的每个被投票人都有一个得票记录的字段现在想用一条sql查询每个人的排名排名根据 计算 count(得票数  大于 当前被投票人得票数)+1不知道有没有办法查询出来

解决方案 »

  1.   

     select *
            from info
            where 被投票人的数 > (select 被投票人的数 from info where user='123');
      

  2.   

    select d.*, @r:=if(@c>c,@r+1,@r) as 排名, @c:=c 
    from( 
    select 被投票人, count(*) as c from 表 group by 被投票人 order by c desc 
    )d,(select @c:=null, @r:=1) _;
      

  3.   

    没有提供案例,不知道这个是不是你要的结果
    declare @t table (No int,person varchar(100))
    insert into @t
    select 1,'张三'  union ALL
    select 2,'张三'  union ALL
    select 3,'李四'  union ALL
    select 4,'王五'  union ALL
    select 5,'张三'  union ALL
    select 6,'张三'  union ALL
    select 7,'张三'  union ALL
    select 8,'李四' 
    ---以上测试数据
    SELECT * FROM (
    select person,count(1) as countNo
    from @t
    Group by person ---按人员分组求出每个人员的投票总数量
    ) AS A--把里面这段SQL当临时表A
    WHERE A.countNo>(SELECT COUNT(distinct person)+1 AS No from @t)---在A表中查出数量大于投标人数+1的人员
    --如案例中总投票人数为3人,按你的要求查出大于总人数+1的人员 ,所以只有张三满足
      

  4.   

     表里每一个被投票人只有一条数据,每条数据记录不同的得票数。所以group by被投票人的话,c就永远都一样了啊