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.

SQL: Cómo referenciar una nueva columna de la consulta externa en una subconsulta.

Me gustaría crear una nueva variable en una consulta externa y luego manipular esta nueva variable en una subconsulta. Sin embargo, al hacer referencia a la nueva columna en la subconsulta, recibo un error que dice “no existe esa columna”.

Código:

dbGetQuery(db, 
  "SELECT id, var1/var2 AS new_var, (SELECT SUM(new_var) AS summed_var
    FROM table 
    GROUP BY id) 
  FROM table")

En este código anterior, el problema es que new_var no se pasa a la subconsulta. ¿Cómo puedo pasar la columna recién definida, new_var, a la subconsulta?

EDICIÓN: Cambiar la consulta interna/externa todavía no funciona:

dbGetQuery(db, 
  "SELECT SUM(new_var) AS summed_var (SELECT id, var1/var2 AS new_var
    FROM table)
  FROM table
  GROUP BY id")

EDICIÓN 2: Los datos están estructurados de la siguiente manera. Cada fila es una observación para una id. Me gustaría generar una proporción, new_var = var1/var2, para cada línea. Luego, me gustaría sumar la proporción new_var para cada id. En los datos de ejemplo, por ejemplo, la proporción sumada para Sally sería 3/4 + 7/8.

Mi desafío era usar GROUP BY con SQL. No estaba seguro de cómo realizar GROUP BY id después de generar new_var en una base de línea por línea.

id       var1     var2    new_var
sally     3        4         3/4
susan     5        6         5/6
sally     7        8         7/8
tom       9        10        9/10
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para hacer referencia a la columna recién definida, new_var, en la subconsulta, necesitas realizar una consulta anidada, donde la consulta externa genere la nueva columna y la consulta interna la haga referencia.

    El código corregido sería:

    dbGetQuery(db, 
      "SELECT id, new_var, 
        (SELECT SUM(new_var) AS summed_var
         FROM (SELECT id, var1/var2 AS new_var
               FROM table) subquery
         WHERE subquery.id = main_table.id
         GROUP BY id) AS summed_var
      FROM table main_table")
    

    En este código, la consulta externa genera la nueva columna, new_var, y también selecciona el id. La consulta interna suma la columna new_var de una subconsulta, donde el id de la subconsulta coincide con el id de la consulta externa. Finalmente, el summed_var se devuelve como una columna en la consulta externa.

    Con este enfoque, puedes hacer referencia a la columna new_var en la consulta interna y realizar cualquier manipulación que necesites.

Comments are closed.