Calcular la media de varios valores medios calcula

Con la consulta ...
SELECT [DNI], [ANO], AVG([IMPORTE]) AS IMPORTE_MEDIO_PORCLI FROM TABLA
GROUP BY [DNI], [ANO]
ORDER BY [DNI], [ANO];
obtengo :
DNI ANO IMPORTE_MEDIO_PORCLI
1 2003 15
1 2004 20
2 2003 10
2 2004 30
Pero quiero añadir a la misma query de arriba que saque en vez de estos 4 registros sólo uno con EL IMPORTE_MEDIO del IMPORTE_MEDIO_PORCLI,
o sea, quiero que el resultado de mi query sea la media de ;
15, 20, 10 y 30,
Pero cuando intento hacerlo me dice "La subconsulta devuelve más de un valor" y no sé como hacerlo.

1 respuesta

Respuesta
1
Puedes utilizar una subquery, así:
SELECT Avg(IMPORTE_MEDIO_PORCLI) As IMPORTE_MEDIO_TOTAL
FROM (
SELECT DNI, ANO, Avg(IMPORTE) AS IMPORTE_MEDIO_PORCLI
FROM DNI_ANO_IMPORTE
GROUP BY DNI, ANO)
Pero no lo acabo de entender muy bien. ¿Tienes más de un importe por DNI y ANO?
Si agrupas por DNI y AÑO el resultado de la consulta debería ser igual que la tabla completa. Si quieres la media de los años por cada DNI, agrupa solo por DNI. Entonces saldrá un registro por DNI.
La consulta que te he pasado devuelve un solo registro con la media global.
Para la media de todos los años por DNI:
SELECT DNI, Avg(IMPORTE) AS IMPORTE_MEDIO_PORCLI
FROM TABLA
GROUP BY DNI
Para la media general (todos los DNIs y todos los AÑOs) usando subquery:
SELECT Avg(IMPORTE_MEDIO_PORCLI) As IMPORTE_MEDIO_TOTAL
FROM (
SELECT DNI, Avg(IMPORTE) AS IMPORTE_MEDIO_PORCLI
FROM TABLA
GROUP BY DNI)
Para la media general (todos los DNIs y todos los AÑOs) sin usar subquery:
SELECT Avg(IMPORTE) As IMPORTE_MEDIO_TOTAL
FROM TABLA
En tu caso, deberías utilizar esta ultima. El uso de subquery en tu caso creo que no tiene sentido, porque la información la sacas de una sola tabla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas