2012-12-07 3 views
3

나는 이와 같은 테이블을 얻고 싶습니다.Mysql 랭킹 쿼리 할당

페이지 수로 랭킹 된 책을 보여줍니다. 페이지 수를 랭킹하기 위해 50 페이지 범위를 사용하고자합니다. 즉, 페이지 수가 500-549 인 도서의 순위는 같습니다. 페이지 수 550-599는 동일한 순위를가집니다. 페이지 수 600-649는 동일한 순위를가집니다. 페이지 수 650-699는 같은 순위를 가지고 있습니다. 샘플 디스플레이에서 우리는 모두 순위 3에있는 4 권의 책을 가지고 있습니다. 우리는 순위 번호를 건너 뛰지 않고 처음 두 샘플 행을 검사합니다. 최대 페이지 수에 대한 가정을하지 마십시오. 쿼리의 로직을 디자인 할 때. 테이블에있는 현재 데이터 세트를 사용하여 논리를 결정하지 마십시오.

+---------+------------+------+ 
| Book_ID | Page_count | Rank | 
+---------+------------+------+ 
| 1001 | 2000 | 1 | 
| 1587 | 1300 | 2 | 
| 8546 | 982 | 3 | 
| 8415 | 980 | 3 | 
| 1474 | 976 | 3 | 
| 1444 | 970 | 3 | 
| 1524 | 918 | 4 | 
| 2005 | 894 | 5 | 
| 200 | 879 | 5 | 
| 201 | 850 | 5 | 
| 4574 | 825 | 6 | 
| 6584 | 825 | 6 | 

편집 : 지금은

SELECT b.book_id AS Book_ID, b.page_count as Page_Count, (
SELECT COUNT(DISTINCT page_count) 
FROM a_bkinfo.books as b2 
WHERE b2.page_count >= b.page_count 
) as Rank 
FROM a_bkinfo.books as b 
ORDER BY Page_Count DESC 

가 지금은

Book_ID Page_Count Rank 
1448 3192 1 
1306 2895 2 
1979 1368 3 
1678 1002 4 
1677 982  5 
1689 980  6 

내가 50 페이지 범위

답변

4

내가 당신을 생각을하는 방법을 알아낼 필요가이 결과를 얻을 수 있습니다 다음과 같은 것을 찾고 있습니다.

select 
    book_id, 
    page_count, 
    (select count(distinct b2.page_count DIV 50) 
    from books b2 
    where b2.page_count DIV 50 >= books.page_count DIV 50) as page_rank 
from books 
order by page_count desc 
+0

완벽! 고마워, <= 대신 DJ 50이하는 일을 나에게 설명해 주시겠습니까? – yan

+0

@RaymondYan, DIV는 모듈러스 또는 %의 보수입니다. 정수 나누기를 수행하고 정수 부분을 부동 소수점 대신 정수로 반환합니다. 'SELECT 5 DIV 2'는 2.5가 아니라 2를 반환합니다. –

+0

나는 본다. 나는 DIV 50 대신에 50을 사용했지만, 50은하지 않았다. – yan