现在需要实现这么一个功能:对数据库中的对应年龄的儿童的身高排序,并得到指定ID儿童的身高排名。就是比如要查询ID为9527的这名8岁儿童的身高在所有8岁儿童身高中的排名。数据库学得不深,一般就进行增减改删,所以不知道怎么实现这个功能。
网上查询了一些资料,就是先进行排序,生成行序号,然后返回对应儿童ID的序号,有个相似语句如下
select id,height,(@rowno:=@rowno+1) as rowno from test,(select (@rowno:=0)) b
order by height desc;
在此基础上再查询位置:
select rowno from (select id,height,(@rowno:=@rowno+1) as rowno from test,
(select (@rowno:=0)) b order by height desc) c where id = 9527;
我的问题是:
1.语句中的(@rowno:=@rowno+1)、(select (@rowno:=0)) 、b、C 是什么意思,查了一下大致知道是自定义命名赋值之类的,但是不清楚准确该怎么理解,还有出现的 b 和 c是什么意思?
2.我要在该语句基础上加一个条件,就是八岁儿童的身高排名,也就是要在第一条排序语句中加入where age equals 8 这句话应该加在哪里? 我试过加在 from test 后面和其他几个地方都报错了,不知道该怎么加。
困扰了一天了,希望数据库的大虾们帮助解答一下这两个问题,万分感谢!!!
1, obtenez la taille de 9527 comme h
2, sélectionnez count(0) à partir de tb où âge = 8 et taille > h;
3, puis le classement de taille de 9527 est égal à count + 1,
Cela n'a pas besoin d'être si compliqué, le classement par taille, si vous classez de haut en bas, calculez-le comme ceci :
a=champ de taille
sélectionnez le nombre (*) d'enfants où
age=8 et
a>= (sélectionnez un parmi les enfants où id=9527 );
count(*) est le classement
mysql ne prend pas en charge les fonctions de classement... Dans des bases de données relativement puissantes telles que Oracle, Postgres, etc., cela peut être facilement implémenté en utilisant row_number()
Si la colonne de la base de données est id, age, height
select id, age , hauteur,
row_number() over (partition par ordre d'âge par hauteur desc) comme rn
from tb