결과 순위를 매기는 방법을 찾았지만 조건에 의해 필터링 된 후에 순위를 지정하는 방법에 대한 해결책을 아직 찾지 못했습니다. 내가 뭘해야입니다 :다른 테이블에 가입 한 후 MySQL 결과를 순위 지정하고 조건에 따라 필터링합니다.
1) 순서
2) 계정 테이블
3 결과 참여) 계정 테이블에서 나이와 성 결과를 (필터)
4 내림차순으로 점수를 정렬) 순위를 정하십시오.
5) IE (25-75, 아래에서 간단히하기 위해 0-10을 입력) 범위 내에서 결과를 가져옵니다.
각 솔루션 중 하나를 찾거나 순위를 제대로 지정하지 않았거나 순위를 정한 다음 결과를 필터링합니다. 그러나 이것은 1, 2, 3, 4, 5 등 또는 25, 26, 27, 28, 29 등을 원할 때 1, 3, 4, 6, 10 등과 같은 순위를 남긴다.
SELECT a.id, a.username, a.country, score, user_id, duration, rank
FROM (
SELECT s.*, a.age, a.gender, @rownum := @rownum + 1 AS rank
FROM scores s,
(SELECT @rownum := 0) r
LEFT JOIN accounts a ON 1
WHERE a.age>=18 && a.age<=35 && a.gender='m'
ORDER BY score DESC, duration DESC, time) `selection`
LEFT JOIN accounts a ON a.id=user_id
WHERE rank >= 0 && rank <= 10 && a.age>=18 && a.age<=35 && a.gender='m'
위의 쿼리의 문제는 나에게 틈없이 정확한 순위를 준다이다, 그러나 점수는 순서가 완전히 있습니다 : 여기
내가 지금 가지고있는 것입니다. IE. 5, 1, 10, 7, 125, 50 등. 그들은 정렬되지 않은 데이터베이스와 동일한 순서로 나옵니다.
이 내 이전 쿼리가 어떻게 생겼는지입니다 : 내가 제대로 점수를 분류 제공하지만,
SELECT a.id, a.username, a.country, score, duration, rank
FROM (
SELECT s.*, @rownum := @rownum + 1 AS rank
FROM scores s,
(SELECT @rownum := 0) r
ORDER BY score DESC, duration DESC, time) `selection`
LEFT JOIN accounts a ON a.id=user_id
WHERE rank >= 0 && rank <= 10 && a.age>=18 && a.age<=35 && a.gender='m'
이 쿼리 순위 3, 5, 8, 9, 11 대신 1, 2, 3, 4 등 , 5
id, username, country는 관련없는 데이터이고 테이블 아래로 계속 반복되기 때문에 모두 생략되었습니다. 연령대는 '34'로 상태가 표시되는 것과 마찬가지로 34 세의 나이에이 사용자가 유일하기 때문에 국가와 사용자 이름이 동일합니다.
첫 번째로 적절한 순위와 위의 쿼리하지만 잘못 분류 점수 (데이터베이스에 추가 된로 IE 같은 순서.) : 위에서
이age | score | rank
--------------------
34 | 5 | 1
34 | 1 | 2
34 | 22 | 3
34 | 13 | 4
34 | 23 | 5
34 | 23 | 6
34 | 34 | 7
34 | 32 | 8
34 | 58 | 9
34 | 76 | 10
두 번째 쿼리는 제대로 정렬하지만 여전히 고려하여 다른 사용자를 취할 랭크 순위를 매길 때 최종 결과에서 제외됩니다.
age | score | rank
---------------------
34 | 76 | 3 --- This should have started at 1
34 | 62 | 4
34 | 58 | 5
34 | 42 | 7 --- Notice 6 was skipped
34 | 34 | 8
34 | 32 | 9
34 | 29 | 10
나는 무엇을 기대 :
age | score | rank
--------------------
34 | 76 | 1
34 | 62 | 2
34 | 58 | 3
34 | 42 | 4
34 | 34 | 5
34 | 32 | 6
34 | 29 | 7
당신이 당신의 예상 출력과 함께 테이블에 대한 일부 샘플 데이터를 포함시겠습니까? –
@TimBiegeleisen 안녕하세요. Tim, 언급 해 주셔서 감사합니다. 내 서버에서 샘플 데이터를 추가했습니다. –
여러 테이블이 있지만 하나의 테이블에 대한 데이터 만 표시했습니다. –