¿Puedo ejecutar una instrucción select y obtener el número de fila si los elementos están ordenados?
Tengo una mesa como esta:
mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| orderID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| itemID | bigint(20) unsigned | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
Entonces puedo ejecutar esta consulta para obtener el número de pedidos por ID:
SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;
Esto me da un recuento de cada uno itemID
en la tabla de esta manera:
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
También quiero obtener el número de fila, por lo que podría decir que itemID=388
es la primera fila, la 234
segunda, etc. (esencialmente la clasificación de los pedidos, no solo un recuento sin procesar). Sé que puedo hacer esto en Java cuando recupere el resultado, pero me preguntaba si había una manera de manejarlo solo en SQL.
Actualizar
Establecer el rango lo agrega al conjunto de resultados, pero no se ordena correctamente:
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
(ordenar por rango en orden ASCending). Supongo que eso es lo que quiere decir con , pero no ordena correctamente