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.

Calculando valores en filas uno por uno usando sum() over(partition by)

Tienes la siguiente tabla (TablaX):

La meta es calcular los cambios por account_id y mostrar el valor final:

Por lo tanto, cuando account_id=1, el valor es 500-100=400 y cuando account_id=2, el valor es 300+100-300=100.

Intenté la siguiente consulta pero no da el resultado que deseo:

SELECT SUM(change) OVER(PARTITION BY account_id) FROM TableX GROUP BY Account_id

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado, necesitas utilizar la función SUM() con la cláusula OVER() y la cláusula PARTITION BY para agrupar los registros por account_id. También necesitas utilizar la cláusula ORDER BY para ordenar los registros por la columna de fecha antes de calcular la suma de cambios.

    Aquí está la consulta correcta:

    SELECT account_id, SUM(change) OVER(PARTITION BY account_id ORDER BY date) AS ending_value 
    FROM TableX;
    

    Esto te dará la salida deseada:

    | account_id | ending_value |
    |------------|--------------|
    | 1          | 400          |
    | 1          | 500          |
    | 2          | 100          |
    | 2          | 400          |
    | 2          | 100          |
    

    Ten en cuenta que la cláusula ORDER BY es importante aquí, ya que asegura que los cambios se sumen en el orden correcto. Sin ella, los resultados pueden ser impredecibles.

Comments are closed.