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

Como sacar la desviacion estandar en SQL SERVER

Estas en el tema de Como sacar la desviacion estandar en SQL SERVER en el foro de SQL Server en Foros del Web. Hola, Quiero sacar la desviacion estandar de un conjunto de datos obtenidos por el SQL SERVER. El problema que tengo es que cuando hago mi ...
  #1 (permalink)  
Antiguo 07/08/2012, 09:50
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Como sacar la desviacion estandar en SQL SERVER

Hola,
Quiero sacar la desviacion estandar de un conjunto de datos obtenidos por el SQL SERVER.

El problema que tengo es que cuando hago mi consulta me regresa varias desviaciones estandar diferentes.
Esto no tiene logica ya que solo deberia de ser un solo valor, asi como cuando se hace un AVERAGE, que es un calculo basado en varios datos.

Si yo hago un
Código SQL:
Ver original
  1. SELECT  STDEV(peso) FROM pesos
Esto me regresaria un solo registro de la desviacion estandart pero yo quiero poner un where para saber por donde validar
Muestro en amarillo los datos que quiero sacar la desviacion y en rojo el resultado ilogico:




--
Tambien he intentado hacer lo siguiente:
Código SQL:
Ver original
  1. SELECT dbo.Optimas.Linea, dbo.pesos.Peso,dbo.htargets.Target, dbo.HTargets.Marca, dbo.pesos.Vaso, dbo.Optimas.Tubo,
  2.                             dbo.pesos.Hora, promedio, desviacion, total
  3.                            
  4.      
  5.     FROM pesos,  (SELECT AVG(peso) AS promedio, stdev(peso) AS desviacion,
  6.                                     COUNT(peso) AS total FROM pesos WHERE codOptima = 50 AND hora = '11:30 - 12:30') tmpsq
  7.                                    
  8.     INNER JOIN Optimas ON optimas.codigo = pesos.codoptima
  9.     INNER JOIN htargets ON optimas.codigo = htargets.codoptima
  10.     WHERE
  11.      
  12.      
  13.     --optimas.linea = linea
  14.      
  15.     pesos.hora = '11:30 - 12:30'
  16.                     AND
  17.     optimas.codigo = 50
Pero me retorna:
Cita:
Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "pesos.codoptima" could not be bound.
  #2 (permalink)  
Antiguo 07/08/2012, 10:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Como sacar la desviacion estandar en SQL SERVER

Código SQL:
Ver original
  1. CREATE TABLE #temp(
  2. dato DECIMAL (8,3)
  3. )
  4.  
  5.  
  6. INSERT INTO #temp VALUES (895.60)
  7. INSERT INTO #temp VALUES (895.60)
  8. INSERT INTO #temp VALUES (895.60)
  9. INSERT INTO #temp VALUES (896.00)
  10. INSERT INTO #temp VALUES (896.00)
  11. INSERT INTO #temp VALUES (896.00)
  12.  
  13. 0.219089022678999

Hice una prueba con estos datos y solo regresa 1 valor, como estas haciendo tu query??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 07/08/2012, 10:08
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Como sacar la desviacion estandar en SQL SERVER

Hola, perdon no puse la consulta, lo hago asi:
Código SQL:
Ver original
  1. SELECT dbo.Optimas.Linea, dbo.pesos.Peso, STDEV(dbo.pesos.Peso)AS desv,dbo.htargets.Target, dbo.HTargets.Marca, dbo.pesos.Vaso, dbo.Optimas.Tubo, dbo.pesos.Hora
  2.  
  3. FROM pesos
  4. INNER JOIN Optimas ON optimas.codigo = pesos.codoptima
  5. INNER JOIN htargets ON optimas.codigo = htargets.codoptima
  6. WHERE
  7.  
  8. pesos.hora = '11:30 - 12:00'
  9.         AND
  10. optimas.codigo = 50
  11.  
  12. GROUP BY Optimas.Linea,pesos.Peso,
  13. dbo.htargets.Target,
  14. dbo.HTargets.Marca,
  15. dbo.pesos.Vaso,
  16. dbo.Optimas.Tubo,
  17. dbo.pesos.Hora
  #4 (permalink)  
Antiguo 07/08/2012, 10:15
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Como sacar la desviacion estandar en SQL SERVER

en el query que mandas estas agrupando todos los datos de tu tabla es por eso que te da diferentes desviaciones y en el segundo query parece ser que esa columna no existe en tu tabla de pesos o es una columna calculada(alias), hice el query con un group by y regresa esto:

Código SQL:
Ver original
  1. CREATE TABLE #temp(
  2. dato DECIMAL (8,3)
  3. )
  4.  
  5.  
  6. INSERT INTO #temp VALUES (895.60)
  7. INSERT INTO #temp VALUES (895.60)
  8. INSERT INTO #temp VALUES (895.60)
  9. INSERT INTO #temp VALUES (896.00)
  10. INSERT INTO #temp VALUES (896.00)
  11. INSERT INTO #temp VALUES (896.00)
  12. INSERT INTO #temp VALUES (896.20)
  13. INSERT INTO #temp VALUES (896.20)
  14. INSERT INTO #temp VALUES (896.20)
  15.  
  16.  
  17.  
  18. SELECT dato,stdev(dato) FROM #temp GROUP BY dato
  19.  
  20. 895.600 0
  21. 896.000 0
  22. 896.200 0

lo cual esta bien porque le estas diciendo a sql que saque la desviacion standar de cada grupo(en este caso los valores son los mismos por lo que da 0)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 07/08/2012, 10:25
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Como sacar la desviacion estandar en SQL SERVER

Hola, asi es, pero agrego el group by porque forzozamente me pide que lo ponga, y no me funciona hasta que pongo todos los group by
  #6 (permalink)  
Antiguo 07/08/2012, 10:32
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Como sacar la desviacion estandar en SQL SERVER

asi es porque tienes una funcion de agregado(necesita que todos los campos que se muestran en el query esten agrupados) lo que podrias hacer es sacar la desviacion standar con un subquery

Código SQL:
Ver original
  1. CREATE TABLE #temp(
  2. dato DECIMAL (8,3)
  3. )
  4.  
  5.  
  6. INSERT INTO #temp VALUES (895.60)
  7. INSERT INTO #temp VALUES (895.60)
  8. INSERT INTO #temp VALUES (895.60)
  9. INSERT INTO #temp VALUES (896.00)
  10. INSERT INTO #temp VALUES (896.00)
  11. INSERT INTO #temp VALUES (896.00)
  12. INSERT INTO #temp VALUES (896.20)
  13. INSERT INTO #temp VALUES (896.20)
  14. INSERT INTO #temp VALUES (896.20)
  15.  
  16.  
  17.  
  18. SELECT dato,(SELECT stdev(dato) FROM #temp) AS desv FROM #temp GROUP BY dato
  19.  
  20. 895.600 0.264575131449666
  21. 896.000 0.264575131449666
  22. 896.200 0.264575131449666

Aunque en este caso la desviacion standar es la misma para todo el conjunto de resultados :)(que seria lo mismo que un max o un AVG es el mismo para todo el conjunto de datos)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 07/08/2012, 10:45
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Como sacar la desviacion estandar en SQL SERVER

Ya he quitado todos los datos y solo he dejado el stev y aun asi me muestra solo esa columna pero con varias valores como te mostre hace rato
  #8 (permalink)  
Antiguo 07/08/2012, 11:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Como sacar la desviacion estandar en SQL SERVER

hice la prueba con los datos que pones para peso, no se datos de las otras tablas que usas en tu query....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 07/08/2012, 13:51
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Como sacar la desviacion estandar en SQL SERVER

th3r0rn- leí todo el hilo y todavia no entiendo que es el problema.
En la consulta Group By hay una fila para cada combinación de {Linea,Peso,Target,Marca,Vaso,Tubo,Hora},
cada fila representa el resumen de varias filas,
y les calcula la deviación estandar.
Los resultados son a veces iguales y a veces no.
Cual es el problema?
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #10 (permalink)  
Antiguo 07/08/2012, 14:42
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Como sacar la desviacion estandar en SQL SERVER

Cita:
Iniciado por GeriReshef Ver Mensaje
th3r0rn- leí todo el hilo y todavia no entiendo que es el problema.
En la consulta Group By hay una fila para cada combinación de {Linea,Peso,Target,Marca,Vaso,Tubo,Hora},
cada fila representa el resumen de varias filas,
y les calcula la deviación estandar.
Los resultados son a veces iguales y a veces no.
Cual es el problema?
Esa es la cuestion, donde esta el issue :S???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 07/08/2012, 16:16
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Como sacar la desviacion estandar en SQL SERVER

¿donde habra quedado?, acaso se lo llevaron los aliens?
__________________
MCTS Isaias Islas
  #12 (permalink)  
Antiguo 08/08/2012, 01:11
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Como sacar la desviacion estandar en SQL SERVER

Entones el problema es que nadie sabe que es el problema?

th3r0rn - tengo conjetura que es lo que buscas: en la recuperación hay varias filas, y lo que quieres obtener es la deviación estandar de todas las filas, y no las distintas deviaciones estandartas de cada grupo de filas.

En este caso la recuperación debe ser mas o menos asi:
Código SQL:
Ver original
  1. SELECT    *,
  2.               StDev(peso) OVER() DevEst
  3. FROM      ....
  4. INNER JOIN ....
  5.               ON ...
  6. WHERE   ....
  7. ORDER BY ....;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #13 (permalink)  
Antiguo 09/08/2012, 13:11
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Como sacar la desviacion estandar en SQL SERVER

Hola,
Sorry por no contestar, estaba ocupado haciendo esto, ya me quedo!!
Les muestro:
Código SQL:
Ver original
  1. SELECT AVG(peso) AS promedio, stdev(peso) AS desviacion,
  2.                                     COUNT(peso) AS total FROM pesos WHERE codOptima = 92 AND hora = '14:30 - 15:00'
:D

Agradezco mucho su apoyo ya que sin el no se hubiera logrado.
Saludos.

Etiquetas: estandar, server, sql
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 02:01.