es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reste diferentes filas de columnas diferentes en Sqlite.

Digamos que tengo una tabla de SQL como esta:

id | val_1 | val_2
1 | 55 | 300
2 | 90 | 600
3 | 80 | 200
..

Ahora, quiero restar 300-90, luego 600-80, y así sucesivamente con un desplazamiento de una fila. La tabla puede tener una cantidad impar de filas como esta. ¿Existe alguna posibilidad de hacer esto sin un bucle y funciones externas? Utilizo la API de Python para sqlite3.

¡Gracias de antemano!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes lograr esto utilizando funciones de ventana con la función LEAD. La función LEAD devuelve el valor de una expresión dada, pero con el desplazamiento del número de filas dado después de la fila actual. Aquí tienes la consulta SQL que puedes utilizar:

    SELECT 
        id, 
        val_1, 
        val_2,
        val_2 - LEAD(val_1, 1, 0) OVER (ORDER BY id) AS valor_resta
    FROM tu_tabla;
    

    Explicación de la consulta:

    • LEAD(val_1, 1, 0) OVER (ORDER BY id) devuelve el valor de val_1 con un desplazamiento de 1 fila para cada fila en la tabla. El último parámetro 0 es el valor predeterminado que se devuelve cuando no hay una fila siguiente.
    • valor_resta es el alias de columna para el resultado de la resta.

    • La cláusula OVER especifica la partición y el ordenamiento de las filas en el conjunto de resultados. En este caso, ordenamos las filas por id.

    Con esta consulta, obtendrás un conjunto de resultados como este:

    id | val_1 | val_2 | valor_resta
    1  | 55    |  300  | -235
    2  | 90    |  600  | 510
    3  | 80    |  200  | NULL
    

    Ten en cuenta que la última fila tiene un valor NULL para la columna valor_resta porque no hay una fila siguiente para restarle.

Comments are closed.