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
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:
En este código, la consulta externa genera la nueva columna,
new_var
, y también selecciona elid
. La consulta interna suma la columnanew_var
de una subconsulta, donde elid
de la subconsulta coincide con elid
de la consulta externa. Finalmente, elsummed_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.