2012-12-07 124 views
3

我想要得到這樣的表Mysql排名查詢分配

顯示我們有的書,按頁數排序。我們希望使用50頁的範圍來對頁數進行排名。這意味着任何頁數爲500-549的書都具有相同的排名;頁數550-599有相同的排名;頁數600-649具有相同的排名;頁數650-699具有相同的排名,等等。在示例顯示中,我們有四本書,全部排在第3位。請注意,我們沒有跳過排名數字 - 檢查前兩個樣本行。不要對最大頁面計數值做出假設。設計查詢的邏輯時。不要使用表中的當前數據集來決定邏輯。

+---------+------------+------+ 
| 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

完美!謝謝,它是> =而不是<=能否向我解釋DIV 50的作用? – yan

+0

@RaymondYan,DIV是模數的補數,或%:它進行整數除法,並將整數部分作爲整數而不是浮點數返回。 'SELECT 5 DIV 2'返回2,而不是2.5。 –

+0

我明白了。我用--50代替DIV 50,但是 - 50沒有工作 – yan