2012-12-07 4 views
3

Je veux un tableau comme çaMysql Classement requête attribution

Afficher les livres que nous avons, classés par nombre de pages. Nous voulons utiliser une plage de 50 pages pour classer le nombre de pages. Cela signifie que tout livre dont le nombre de pages est compris entre 500 et 549 a le même rang; les pages 550-599 ont le même rang; les nombres de pages 600-649 ont le même rang; Les nombres de pages 650-699 ont le même rang, etc. Dans l'affichage de l'échantillon, nous avons quatre livres qui sont tous de rang 3. Notez que nous ne sautons pas les numéros de classement - examinez les deux premières rangées de l'échantillon. Ne faites pas d'hypothèses sur la valeur maximale du nombre de pages. Lors de la conception de la logique de la requête. n'utilisez pas l'ensemble de données actuel dans la table pour prendre une décision sur la logique.

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

ÉDITÉ: Maintenant, j'ai

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 

Maintenant, j'obtenir ce résultat

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

J'ai besoin de savoir comment faire la gamme de 50 pages

Répondre

4

Je pense que vous cherchez quelque chose comme ceci:

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

Parfait! Merci, c'était> = au lieu de <= pourriez-vous m'expliquer ce que DIV 50 fait? – yan

+0

@RaymondYan, DIV est le complément du module, ou%: il fait une division entière et renvoie la partie entière sous la forme d'un entier au lieu d'un flottant, par ex. 'SELECT 5 DIV 2' renvoie 2, pas 2.5. –

+0

Je vois. J'ai utilisé - 50 au lieu de DIV 50 mais - 50 ne fonctionnait pas – yan