mysql查询数据计算

qq-君子有酒 2018-03-03 03:53:36
有投票表中的每个被投票人都有一个得票记录的字段

现在想用一条sql查询每个人的排名

排名根据 计算 count(得票数 大于 当前被投票人得票数)+1

不知道有没有办法查询出来
...全文
645 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq-君子有酒 2018-03-21
  • 打赏
  • 举报
回复
引用 3 楼 zjcxc 的回复:
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) _;
表里每一个被投票人只有一条数据,每条数据记录不同的得票数。所以group by被投票人的话,c就永远都一样了啊
qq-君子有酒 2018-03-21
  • 打赏
  • 举报
回复
引用 3 楼 zjcxc 的回复:
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) _;
不是很能看懂,最后的那个下划线的是什么意思?
qq-君子有酒 2018-03-21
  • 打赏
  • 举报
回复
引用 2 楼 yaoxiewan6617 的回复:
select * from info where 被投票人的数 > (select 被投票人的数 from info where user='123');
就是这个‘123’是不知道的,多条数据
zjcxc 2018-03-05
  • 打赏
  • 举报
回复
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) _;
yaoxiewan6617 2018-03-05
  • 打赏
  • 举报
回复
子查询就行啊
yaoxiewan6617 2018-03-05
  • 打赏
  • 举报
回复
select * from info where 被投票人的数 > (select 被投票人的数 from info where user='123');
小野马1209 2018-03-05
  • 打赏
  • 举报
回复
没有提供案例,不知道这个是不是你要的结果
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的人员 ,所以只有张三满足

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧