Puis-je exécuter une instruction select et obtenir le numéro de ligne si les éléments sont triés ?
J'ai une table comme celle-ci :
mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| orderID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| itemID | bigint(20) unsigned | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
Je peux ensuite exécuter cette requête pour obtenir le nombre de commandes par ID :
SELECT itemID, COUNT(*) as ordercount FROM orders GROUP BY itemID ORDER BY ordercount DESC;
Cela me donne un compte de chaque itemID dans la table comme ceci :
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
Je veux également obtenir le numéro de ligne, afin de pouvoir dire que l'itemID 388 est la première ligne, 234 la deuxième, etc. (essentiellement le classement des commandes, et pas seulement un compte brut). Je sais que je peux faire cela en Java lorsque je reçois l'ensemble des résultats, mais je me demandais s'il y avait un moyen de le faire purement en SQL.
Mise à jour
La définition du rang l'ajoute à l'ensemble des résultats, mais sans l'ordonner correctement :
mysql> SET @rank=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount
-> FROM orders
-> GROUP BY itemID ORDER BY rank DESC;
+------+--------+------------+
| rank | itemID | ordercount |
+------+--------+------------+
| 5 | 3459 | 1 |
| 4 | 234 | 2 |
| 3 | 693 | 1 |
| 2 | 3432 | 1 |
| 1 | 388 | 3 |
+------+--------+------------+
5 rows in set (0.00 sec)
1 votes
Pour référence future : Si vous voulez commander du rang 1 au rang 5, utilisez
ORDER BY rank ASC
(classement par rang dans l'ordre croissant de l'ASC). Je suppose que c'est ce que vous voulez dire par mais n'a pas été correctement commandé0 votes
Duplicata possible de ROW_NUMBER() dans MySQL