이제 데이터베이스에서 해당 연령의 어린이 키를 정렬하고 지정된 ID를 가진 어린이의 키 순위를 가져오는 함수를 구현해야 합니다. 예를 들어 전체 8세 어린이의 키 중에서 ID가 9527인 8세 어린이의 키 순위를 쿼리하려고 합니다. 저는 데이터베이스에 대해 잘 몰라서 주로 추가, 삭제, 수정, 삭제만 하므로 이 기능을 어떻게 구현하는지 모르겠습니다.
온라인에서 일부 정보를 쿼리한 후 먼저 행 일련번호를 생성한 다음 하위 ID에 해당하는 일련번호를 반환했습니다.
테스트에서 id,height,(@rowno:=@rowno+1)를 rowno로 선택하고(select (@rowno:=0)) b
높이순으로 정렬;
이를 바탕으로 위치를 쿼리합니다.
테스트에서 rowno로 (id,height,(@rowno:=@rowno+1 선택)에서 rowno를 선택하고,
(선택(@rowno:=0)) b 높이순 설명) c 여기서 id = 9527;
내 질문은 다음과 같습니다.
1. 명령문에서 (@rowno:=@rowno+1), (select (@rowno:=0)), b 및 C는 무엇입니까? ? 찾아보니 맞춤 명명 할당과 같은 것 같은데 b와 c가 무엇을 의미하는지 정확히 모르겠습니다. 못된 것 같아?
2. 이 명령문에 8세 어린이의 키 순위를 추가하고 싶습니다. 즉, 첫 번째 정렬 명령문에 나이가 8인 위치를 추가해야 합니다. 추가됐나요? 테스트를 거쳐 추가하려고 했으나, 오류가 발생하여 어떻게 추가해야 할지 모르겠습니다.
하루종일 고민했습니다. 데이터베이스 새우가 이 두 가지 질문에 답하는 데 도움이 되었으면 좋겠습니다. ! !
1, 9527의 키를 h
2로 가져오고, 나이 = 8이고 키 > h;
3인 tb에서 count(0)를 선택하면 9527의 키 순위는 동률 count + 1이 됩니다.
너무 복잡할 필요는 없습니다. 키 순위를 매기려면 다음과 같이 계산하세요.
a=키 필드
select count(*)
age=8이고
a>=인 어린이의 수 (id=9527인 어린이 중에서 선택);
count(*)가 순위입니다
mysql은 순위 함수를 지원하지 않습니다... oracle, postgres 등 상대적으로 강력한 데이터베이스에서는 row_number()를 사용하여 쉽게 구현할 수 있습니다.
데이터베이스의 열이 id, age, height인 경우
id, age를 선택합니다. , height,
row_number() 이상(연령별 파티션, 키 순서순) as rn
from tb