项目需求,查询区县五大指标平均值在市里所有区县平均值的排名,要用到虚列
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方法,但是却没有仔细研究思考,只是直接拿来用了,并不知道其原理才导致自己的错误,希望自己以后能长记性