mysql查询排名,以及将多个查询结果合并到一行

项目需求,查询区县五大指标平均值在市里所有区县平均值的排名,要用到虚列

select @rownum :=@rownum + 1 AS rank ,a.* from a,(SELECT @rownum:=0) r

		select d.score1_rank from (
		select @rownum :=@rownum + 1 AS score1_rank,c.county from
		(
		select avg(a.score1) num,b.county from
		(select company_id,score1 from gxt_mc_benefit_evaluation where del_flag='0' and status='5')a
		LEFT JOIN
		(select id,province,city,county from gxt_company_info where del_flag='0') b on a.company_id=b.id
	where 
			b.city='370100'
		GROUP
		BY b.county
		)c,
		(SELECT @rownum:=0) r ORDER BY c.num desc
		)d
		where d.county='370102'

结果

里面各种问题要注意,说一下我这里遇到的问题,

需要查询到五个指标的排名,这里我的语句只是查询到了一个指标的排名还少四个,如果一个一个查询,要查询五次数据库

想把这五个拼接起来,像这样

想到了,用这种方式

select * from 
(select ....) a,
(select ....) b,
(select ....) c,
(select ....) d,
(select ....) e

就把我上面的语句这样做了,得到的结果是这样

我一开始以为这就行了,然后我又做了市在省里五大指标排名,但是我看了一下,那时候山东就16个市,不可能出现34,23,

实际结果应该是这样

然后我就查询sql,拼接的五个sql一个一个执行没问题,但是一起查询就不对,陷入沉思了,也不好意思问大哥,

解决:

注意这里  select @rownum :=@rownum + 1 AS score5_rank      (SELECT @rownum:=0) r 

由于我这五个查询全部都用的这个变量,这是不对的,要分别命名,rownum 1,rownum 2,rownum 3,rownum 4,rownum 5

这样就可以了...

总结,想到排名就去网上搜索了@rownum方法,但是却没有仔细研究思考,只是直接拿来用了,并不知道其原理才导致自己的错误,希望自己以后能长记性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值