Mysql排名查询分配

时间:2012-12-07 05:41:03

标签: 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页范围

1 个答案:

答案 0 :(得分: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