obtener numero numerar mostrar filas fila correlativo contador consulta columna agregar mysql sql row-number

numero - MySQL-Obtenga el número de fila en seleccionar



sql server numero de fila (4)

¿Puedo ejecutar una declaración de selección y obtener el número de fila si los artículos 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 itemID en la tabla como este:

+--------+------------+ | itemID | ordercount | +--------+------------+ | 388 | 3 | | 234 | 2 | | 3432 | 1 | | 693 | 1 | | 3459 | 1 | +--------+------------+

También quiero obtener el número de fila, 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 recuento bruto). Sé que puedo hacer esto en Java cuando recupero el resultado, pero me preguntaba si había una forma de manejarlo puramente en SQL.

Actualizar

Establecer el rango lo agrega al conjunto de resultados, pero no ordenado 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)


Echa un vistazo a this .

Cambie su consulta a:

SET @rank=0; SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount FROM orders GROUP BY itemID ORDER BY ordercount DESC;


La solución de Swamibebop funciona, pero aprovechando la sintaxis table.* , Podemos evitar repetir los nombres de columna de la select interna y obtener un resultado más simple / más corto:

select @r := @r+1 , z.* from( /* your original select statement goes in here */ )z, (select @r:=0)y;

Entonces eso te dará:

select @r := @r+1 , z.* from( select itemID, count(*) as ordercount from orders group by itemID order by ordercount desc )z, (select @r:=0)y;


Puedes usar una variable mysql para hacerlo. Algo así debería funcionar (aunque son dos consultas).

SELECT 0 INTO @x; SELECT itemID, COUNT(*) as ordercount, (@x:=@x+1) as rownumber FROM orders GROUP BY itemID ORDER BY ordercount DESC;


SELECT @rn:=@rn+1 AS rank, itemID, ordercount FROM ( SELECT itemID, COUNT(*) AS ordercount FROM orders GROUP BY itemID ORDER BY ordercount DESC ) t1, (SELECT @rn:=0) t2;