3

このようなテーブルを手に入れたい

ページ数でランク付けされた、私たちが持っている本を表示します。ページ数のランク付けには50ページの範囲を使用します。これは、ページ数が500〜549の本はすべて同じランクであることを意味します。ページ数550-599は同じランクです。ページ数600-649は同じランクです。ページ数650-699は同じランクなどです。サンプル表示には、すべてランク3の4冊の本があります。ランク番号をスキップしていないことに注意してください。最初の2つのサンプル行を調べてください。最大ページ数の値については想定しないでください。クエリのロジックを設計するとき。テーブル内の現在のデータセットを使用してロジックを決定しないでください。

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

1 に答える 1

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
于 2012-12-07T06:46:57.447 に答える