¿Puedo ejecutar una declaración de selección y obtener el número de fila si los artículos están ordenados?MySQL - Obtenga el número de fila en seleccionar
Tengo una tabla como la siguiente:
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 puede 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 itemID
en el tabla como esta:
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
Quiero obtener el número de fila también, así que podría decir que itemID=388
es la primera fila, 234
es el segundo, etc. (esencialmente el ranking de los pedidos, no solo un conteo sin procesar). Sé que puedo hacer esto en Java cuando recupero el resultado, pero me preguntaba si había una forma de manejarlo puramente en SQL.
actualización
Ajuste del rango agrega al conjunto de resultados, pero no ordena correctamente:
mysql> SET @rank=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @rank:[email protected]+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)
Para referencia futura: si desea ordenar desde el rango 1 al rango 5, use 'ORDER BY rank ASC' (ordenar por rango en ASC orden de venta). Supongo que eso es lo que quieres decir con * pero no ordenado correctamente * – GroundZero
Posible duplicado de [ROW \ _NUMBER() en MySQL] (http://stackoverflow.com/questions/1895110/row-number-in-mysql) –