Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

[SOLUCIONADO] Promedio de varios campos

Estas en el tema de Promedio de varios campos en el foro de Bases de Datos General en Foros del Web. hola que tal gente, soy nuevo aca, siempre he buscado soluciones en este foro y la verdad es que me ha ido bastante bien, peor ...
  #1 (permalink)  
Antiguo 18/03/2015, 15:40
 
Fecha de Ingreso: marzo-2015
Mensajes: 12
Antigüedad: 9 años, 8 meses
Puntos: 0
Promedio de varios campos

hola que tal gente, soy nuevo aca, siempre he buscado soluciones en este foro y la verdad es que me ha ido bastante bien, peor ahora tengo una duda y no se muy bien como hacerlo..les cuento...tengo una tabla en la cual quiero guardar numeros y luego calcular su promedio ..entonces tengo los campos n1..n2..n3..n4...y n5, la cuestion es que con solo colocar dos notas..es decir n1,n2..me enrtregueun promedio sabiendoque el resto de campos es null...la idea de consulta seria la siguiente

select AVG(n1,n2,n3,n4,n5) from nota;

siendo:
n1=35
n2= 45
n3=70
n4=null
n5=null

¿como hacer para que sume solo los campos que corresponde y luego lo divida en 3 y no en 5?
de ante mano muchas gracias, espero algun dia poder aportar, aun que mis conocimientos son basicos por el momento
  #2 (permalink)  
Antiguo 18/03/2015, 15:46
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Promedio de varios campos

en sql server si los campos son NULL no los toma en cuenta en la funcion AVG ejemplo:

Código SQL:
Ver original
  1. CREATE TABLE #temp2
  2. (
  3. id INT
  4. )
  5.  
  6.  
  7. INSERT INTO #temp2 VALUES (3)
  8. INSERT INTO #temp2 VALUES (2)
  9. INSERT INTO #temp2 VALUES (2)
  10. INSERT INTO #temp2 VALUES (NULL)
  11. INSERT INTO #temp2 VALUES (NULL)
  12. INSERT INTO #temp2 VALUES (NULL)
  13. INSERT INTO #temp2 VALUES (1)
  14. INSERT INTO #temp2 VALUES (10)
  15.  
  16. SELECT avg(id) FROM #temp2
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 18/03/2015, 16:57
 
Fecha de Ingreso: marzo-2015
Mensajes: 12
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Promedio de varios campos

pero estoy en mysql se me olvido decir ese detalle...gracias igual estimado
  #4 (permalink)  
Antiguo 18/03/2015, 17:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Promedio de varios campos

Da igual.
No se cuentan los NULL tampoco, ni entran en juego para funciones agrupadas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/03/2015, 18:24
 
Fecha de Ingreso: marzo-2015
Mensajes: 12
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Promedio de varios campos

si pero lo que haces tu en el ejemplo es promediar los id ... lo que yo quiero es algo asi..
la tabla tiene la siguiente estructura

id / n1 / n2 / n3 / n4 / n5

1 55 65 23 null null (que me entregue el promedio del id 1 siendo que hay 2 nulos)

2 43 35 null null null


si hago una especie de avg(n1,n2,n3,n4,n5) obviamemnte da error


no se si me explico bien
gracias de ante mano

Última edición por MauMontes; 18/03/2015 a las 18:29
  #6 (permalink)  
Antiguo 18/03/2015, 19:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Promedio de varios campos

El error que cometes es que supones que las funciones agrupadas aplican a campos de un registro, y eso no es cierto. Aplican a columnas únicas agrupando registros en base a criterios que se indican.
No existe una función en SQL que haga lo que quieres.
Tienes dos opciones. O lo manejas por programación y/o stored procedure, o normalizas esa tabla como para poder aplicar funciones agrupadas.
Esto lo digo porque sospecho, dado el ejemplo, que esa tabla esta mal diseñada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/03/2015, 06:16
 
Fecha de Ingreso: marzo-2015
Mensajes: 12
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Promedio de varios campos

mmmm entiendo..pense que podia haber algo asi...no cierro por si otra persona puede aportar algo..gracias
  #8 (permalink)  
Antiguo 19/03/2015, 06:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Promedio de varios campos

Vovlamos al punto: ¿QUé representan esas columnas? ¿De qué valores se trata y por qué se deben promediar?
Y más importante aún: ¿Por qué puede haber NULL en esas columnas?

Las preguntas apuntan a entender si, como yo sospecho, no se trata en realidad de una tabla mal diseñada, como por ejemplo un listado de notas de alumnos donde en un mismo registro hubiese campos como Nota1, Noa2, Nota3, ... NotaN.
Ese tipo de diseños son muy habituales en los principiantes o aquellos que no dominna el modelo E-R, y es un error de diseño. Si fuese el caso, la solucion para por corregir el diseño de la tabla, y a partir de eso la consulta y el proceso se simplifican.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 19/03/2015, 12:05
 
Fecha de Ingreso: marzo-2015
Mensajes: 12
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: Promedio de varios campos

la verdad es que es eso, la duda salto por que un amigo que trabaja hace mucho tiempo en con tablas de bancos me dijo que deberia hacerlo asi, yo quede en duda por que se me vino a la mente que la funcion AVG solo admite un parametro, entonces quise preguntar aca si habia una funcion que hiciera algo como eso, pero ya me di cuenta que no...gracias por aclararme la duda..saludos!! :)

Etiquetas: campos, promedio, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:52.