【问题标题】:Mysql Ranking query assignmentMysql排名查询赋值
【发布时间】:2012-12-07 14:46:57
【问题描述】:

我想要一张这样的桌子

显示我们拥有的书籍,按页数排名。我们希望使用 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 页范围

【问题讨论】:

    标签: mysql


    【解决方案1】:

    我认为您正在寻找这样的东西:

    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
    

    【讨论】:

    • 完美!谢谢,它是 >= 而不是
    • @RaymondYan,DIV 是模数的补码,或 %:它进行整数除法并将整数部分作为整数而不是浮点数返回,例如SELECT 5 DIV 2 返回 2,而不是 2.5。
    • @RaymondYan DIV 是整数除法,例如5 DIV 2 = 2,在您的示例中,2000 DIV 50 是 40,1300 DIV 50 是 26,982、980、975,970 DIV 50 都是 19
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2014-06-14
    • 2012-12-30
    相关资源
    最近更新 更多