Puis-je exécuter une instruction de sélection 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 chacun itemID
dans le tableau comme ceci:
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
Je veux aussi obtenir le numéro de ligne, donc je pourrais dire que itemID=388
c'est la première ligne, la 234
deuxième, etc. (essentiellement le classement des commandes, pas seulement un décompte brut). Je sais que je peux faire cela en Java lorsque je récupère le résultat, mais je me demandais s'il y avait un moyen de le gérer uniquement en SQL.
Mettre à jour
La définition du rang l'ajoute à l'ensemble de résultats, mais pas correctement ordonné:
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)
ORDER BY rank ASC
(classement par rang dans l'ordre ASCending). Je suppose que c'est ce que vous entendez par mais pas correctement commandé