MySQL을 사용하면 특정 행의 쿼리 결과 순위를 어떻게 선택합니까?

StackOverflow https://stackoverflow.com/questions/1262448

  •  12-09-2019
  •  | 
  •  

문제

나는 오늘 다양한 일을 시도하는 데 많은 시간을 보냈지 만 그들 중 누구도 효과가없는 것 같습니다. 여기 내 상황이 있습니다. 특별히 정렬 된 행에서 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%'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top