Consulta para incrementar los valores en función de un valor de otra columna

GP007

Tengo una tabla con el siguiente esquema +-------------------------+------------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------------------------+------------------+------+-----+-------------------+-----------------------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | parent_id | int(10) unsigned | NO | | NULL | | | name | varchar(255) | NO | UNI | NULL | | | disp1 | varchar(255) | NO | | NULL | | | disp2 | varchar(255) | NO | | NULL | | | created | timestamp | NO | | CURRENT_TIMESTAMP | | | updated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | node_e | tinyint(1) | YES | | 1 | | | node_priority | int(5) | NO | | NULL | | +-------------------------+------------------+------+-----+-------------------+-----------------------------+ que ejecuto debajo de la consulta para obtener los datos deseados:

select id,node_priority,parent_id from node where parent_id in (Select distinct parent_id from node as n) order by parent_id asc;

que da a continuación la salida:

 +-----+---------------+-----------+
| id  | node_priority | parent_id |
+-----+---------------+-----------+

|  17 |             0 |         2 |
|  18 |             0 |         2 |
|  19 |             0 |         2 |
|  20 |             0 |         2 |
|  21 |             0 |         2 |
| 216 |             0 |         3 |
|  23 |             0 |        22 |
|  24 |             0 |        22 |
|  25 |             0 |        22 |
|  26 |             0 |        22 |
|  27 |             0 |        22 |
|  29 |             0 |        28 |
|  30 |             0 |        28 |
|  31 |             0 |        28 |
|  32 |             0 |        28 |
|  33 |             0 |        28 |
|  35 |             0 |        34 |
|  36 |             0 |        34 |
|  37 |             0 |        34 |
|  38 |             0 |        34 |
|  39 |             0 |        34 |
|  40 |             0 |        34 |
|  41 |             0 |        34 |
|  42 |             0 |        34 |
|  44 |             0 |        43 |
|  45 |             0 |        43 |
|  46 |             0 |        43 |
|  47 |             0 |        43 |
|  48 |             0 |        43 |
|  49 |             0 |        43 |
|  50 |             0 |        43 |
|  51 |             0 |        43 |
|  58 |             0 |        52 |
|  60 |             0 |        52 |
|  66 |             0 |        52 |
|  77 |             0 |        52 |
|  95 |             0 |        52 |
|  96 |             0 |        52 |
| 106 |             0 |        52 |
| 117 |             0 |        52 |
| 128 |             0 |        52 |
| 137 |             0 |        52 |
| 141 |             0 |        52 |
| 164 |             0 |        52 |
|  55 |             0 |        53 |
|  56 |             0 |        53 |
|  57 |             0 |        53 |
|  59 |             0 |        58 |
|  61 |             0 |        60 |
|  62 |             0 |        60 |
|  63 |             0 |        60 |
|  64 |             0 |        60 |
|  65 |             0 |        60 |
|  67 |             0 |        66 |
|  68 |             0 |        66 |
|  72 |             0 |        66 |
|  73 |             0 |        66 |
|  74 |             0 |        66 |

Mi principal objetivo:

Quiero que para el mismo valor de la columna parent_id, el valor de node_priority debe estar en orden incremental desde 0 hasta el número de filas que tienen el mismo parent_id.

por lo que la salida sería como a continuación:

+-----+---------------+-----------+
| id  | node_priority | parent_id |
+-----+---------------+-----------+

|  17 |             0 |         2 |
|  18 |             1 |         2 |
|  19 |             2 |         2 |
|  20 |             3 |         2 |
|  21 |             4 |         2 |
| 216 |             0 |         3 |
|  23 |             0 |        22 |
|  24 |             1 |        22 |
|  25 |             2 |        22 |
|  26 |             3 |        22 |
|  27 |             4 |        22 |
|  29 |             0 |        28 |
|  30 |             1 |        28 |
|  31 |             2 |        28 |
|  32 |             3 |        28 |
|  33 |             4 |        28 |
|  35 |             0 |        34 |
|  36 |             1 |        34 |

No puedo escribir una consulta para el mismo. Amablemente ayuda.

Abhik Chakraborty

En mysql puede lograr esto usando las variables definidas por el usuario algo como

select
id,node_priority,parent_id 
from (
 select 
 id,
 @rn:= if(@prev_parent = parent_id,@rn+1,0) as node_priority,
 @prev_parent:= parent_id,
 parent_id
 from node,(select @prev_parent:=0,@rn:=0)x
 order by parent_id
)x

También

where parent_id in (Select distinct parent_id from node as n)

no es necesario en la consulta anterior.

Para actualizar puede utilizar lo siguiente

update node n1 
join (
  select 
  id,
  @rn:= if(@prev_parent = parent_id,@rn+1,0) as node_priority,
  @prev_parent:= parent_id,
  parent_id
  from node,(select @prev_parent:=0,@rn:=0)x
  order by parent_id,id
)n2 on n1.id = n2.id
set n1.node_priority = n2.node_priority;

http://www.sqlfiddle.com/#!9/3f203/1

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Consulta para incrementar los valores en función de un valor de otra columna

Consulta de Bigquery para obtener la suma de los valores de una columna en función de otra columna

¿Cambiar los valores dentro de la función agregada en función de un valor en otra columna?

SQL selecciona el valor de una columna en función de los valores de otra columna

SQL selecciona el valor de una columna en función de los valores de otra columna

Aumentar el valor de una columna en función de los valores de otra columna

Consulta SQL para seleccionar de una tabla en función de un valor de columna en otra tabla

Consulta para obtener el valor único de una columna y los valores duplicados de otra columna

Obtenga los valores inmediatos de las columnas adyacentes en función del valor de otra columna

¿Es posible insertar automáticamente un valor de columna en una tabla en función de los valores de columna en otra tabla?

Cómo completar los valores faltantes en relación con un valor de otra columna

Pandas: imprime los valores de una columna en función de los valores de otra columna

Agregue sufijos para duplicar los valores de celda (columna) en Pandas según el valor de otra columna (categoría)

Función de Python para completar los valores nan basados en otra columna

¿Consulta MySQL para sumar una columna y contar otra columna, de dos tablas, en función de un valor común?

cómo contar, con qué frecuencia los valores de una columna tienen un valor en común en otra columna

Asignación de un valor de una columna con un valor nan de esa columna dependiendo de los valores en otra columna

Cómo incrementar valores en una columna con la referencia de valor en otra columna

Coaccionar diferentes valores para que sean iguales en función del valor de otra columna

Devolver condicionalmente un vector de algunos valores de fila en función de los valores de fila de otra columna

restar valores a en la columna en R en función de los valores en otra columna

Eliminar filas de una tabla en función de los valores de otra condicional a un valor en una columna separada usando la base R

Consulta de Oracle para recuperar un valor de columna común y distintivo basado en otra columna

Marco de datos R: uso de un valor común en una columna para encontrar valores en otra columna

usando todos los valores de una columna en otra consulta

restablecer los valores de celda en función de los valores en otra columna en R

Consulta SQL para asignar valor a una columna que tiene un valor nulo de otra fila en función de diferentes escenarios

usar valores de una columna como índice para extraer un valor de otra columna en R

En Oracle SQL, ¿cómo puedo encontrar todos los valores en una columna para los que en otra columna existen más de un valor distinto?