MySQL을 사용하면 특정 행의 쿼리 결과 순위를 어떻게 선택합니까?
문제
나는 오늘 다양한 일을 시도하는 데 많은 시간을 보냈지 만 그들 중 누구도 효과가없는 것 같습니다. 여기 내 상황이 있습니다. 특별히 정렬 된 행에서 ID를 기준으로 행의 순위를 선택하고 싶습니다.
예를 들어, 내 쿼리가 다음과 같습니다.
SELECT id, name FROM people ORDER BY name ASC
다음과 같은 결과로 :
id name 3 Andrew 1 Bob 5 Joe 4 John 2 Steve
나는 모든 행을 반환하지 않고 순위 (결과에서 어떤 행)를 얻고 싶습니다.
예를 들어, '스티브'의 '순위'를 선택 하여이 경우 5 (그의 ID가 아니라 위의 쿼리에서 그의 이름의 '순위')를 반환합니다.
마찬가지로, 나는 1의 ID가있는 행의 순위를 선택할 수 있기를 원합니다.이 예에서는 2의 '순위'를 반환하고 싶습니다 (결과 행에 ID가있는 결과이기 때문에 ID가 있습니다. 1) 그리고 다른 것은 없습니다.
나는 다양한 결과를 얻을 수있는만큼 Google을 얻었습니다 ... 더 큰 테이블에 대한 쿼리가 실제로 느려지거나 모든 종류의 임시 테이블과 사용자 변수를 만들어야합니다 (이전에 피하고 싶은 전자, 후자는 후자입니다. 나는 함께 살 수 있다고 생각합니다).
모든 도움이나 통찰력은 대단히 감사하겠습니다.
해결책
~에서 Artfulsoftware:
SELECT p1.id, p1.name, COUNT( p2.name ) AS Rank
FROM people p1
JOIN people p2
ON p1.name < p2.name
OR (
p1.name = p2.name
AND p1.id = p2.id
)
GROUP BY p1.id, p1.name
ORDER BY p1.name DESC , p1.id DESC
LIMIT 4,1
다른 팁
이 같은?
SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
FROM people
ORDER BY name ASC)
WHERE Row = @SomeRowNumber
ID로 가고 싶다면 WHERE 절을 변경하십시오.
이 시도:
SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC
나는이 코드를 시도하고 있습니다 ... 사용자 프로파일 사진에 대한 사용자로부터 결과를 얻고 사용자 포인트를 계산하고 정렬 한 후에보다 가입하는 다른 도움을 줄 수 있습니다. 마침내 사용자를위한 순위에 대한 행 번호를 확인하고 추가하고 있습니다. 감사해요
set @row_num = 0;
set @calp =0;
select if(@calp=(@calp:=user.cal_points), @row_num, @row_num := @row_num + 1) as row_number,user.* from
(select user_skills.*,users.username,upload.file_name from user_skills join users on user_skills.user_id=users.id join upload on upload.upload_id=users.profile_pic order by user_skills.cal_points desc) as user
WHERE user.skill_name LIKE '%ph%'