Foros del Web » Programación para mayores de 30 ;) » .NET »

Problemas para calcular valor medio con MySQL

Estas en el tema de Problemas para calcular valor medio con MySQL en el foro de .NET en Foros del Web. Buenos días. Quiero sacar la media de precio de 1 modelo de coche perteneciente a una marca. El problema es que hago la siguiente consulta ...
  #1 (permalink)  
Antiguo 29/08/2011, 02:56
 
Fecha de Ingreso: agosto-2011
Mensajes: 1
Antigüedad: 12 años, 8 meses
Puntos: 0
Problemas para calcular valor medio con MySQL

Buenos días.

Quiero sacar la media de precio de 1 modelo de coche perteneciente a una marca. El problema es que hago la siguiente consulta y me devuelve la media de TODOS los vehículos de la marca, no del modelo que especifico. Os pego el código:

Código:
formPrincipal.conexda = New MySqlDataAdapter("SELECT AVG(general_precio) FROM tabla_general WHERE general_maid= '" & valormarcaid & "AND general_moid= " & valormodeloid & "'", formPrincipal.conexionbd)
            formPrincipal.conexdt = New DataTable()
            formPrincipal.conexda.Fill(formPrincipal.conexdt)

            MsgBox(formPrincipal.conexdt.Rows(0)("AVG(general_precio)"))

            If (IsDBNull(formPrincipal.conexdt.Rows(0)("AVG(general_precio)"))) Then
                lbmedia.Text = "No hay vehículos insertados."
            Else
                varMedia = formPrincipal.conexdt.Rows(0)("AVG(general_precio)")
                lbmedia.Text = "El precio medio del modelo " & cbmodelof.Text & " de " & cbmarcaf.Text & " es de " & varMedia & " €."
                'MsgBox(varMedia)

            End If
Os pongo el ejemplo, yo selecciono la marca ford, y el modelo mondeo, en el cual hay dos con el precio de 5000€, también hay un modelo fiesta con un precio de 4000€.

Si hago la consulta que aparece en el dataadapter en la web de MySQL, el resultado si es satisfactorio. Sin embargo, cuando trabajo con "formPrincipal.conexdt.Rows(0)("AVG(general_precio )")" parece que se olvida de las condiciones anteriormente especificadas, y me hace una media de TODOS los vehiculos pertenecientes a la marca, por tanto me hace la media de 14000, y no de 10000 como debería ser (la suma de los precios de los dos focus).

A ver si alguien me puede ayudar, ya que necesito que varMedia coja el valor de la media de los modelos que especifico.

Gracias!
  #2 (permalink)  
Antiguo 29/08/2011, 06:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problemas para calcular valor medio con MySQL

Tienes mal escrita la consulta.
Si copio literalmente lo que pones sería:
Código MySQL:
Ver original
  1.     AVG(general_precio)
  2.     tabla_general
  3.     general_maid= '" & valormarcaid & "AND
  4.    general_moid= " & valormodeloid & "'
Por lo que si remplazo valormarcaid y valormodeloid por "1! y "2", por ejemplo, la consulta quedaría:
Código MySQL:
Ver original
  1.     AVG(general_precio)
  2.     tabla_general
  3.     general_maid= '1AND general_moid= 2'
Como puedes ver, en realidad estás comparando general_maid con la cadena "1AND general_moid= 2", lo que puede estar dandote cuálquier resultado, e incluso ninguno.

Consejos:
- Si son valores numéricos, no los pongas entre apóstrofes ('), no lo necesitan y reducen la performance.
- Si son valores de cadena, sí necesitan apóstrofes.
- Respeta los espacios entre los valores y las cláusulas, o generarás errores de sintáxis o de lógica, sin darte cuenta.
- Trata de usar sentencias parametrizadas. Tienden a generar menos errores y permiten escribir las sentencias SQL con más claridad.
- Usa alias para los campos cuando utilizas funciones. Evitarás nombres de columna que te pueden causar problemas.

La cosa podría ser mas o menos:
Código vb:
Ver original
  1. formPrincipal.conexda = New MySqlDataAdapter("SELECT AVG(general_precio) media_precio FROM tabla_general WHERE general_maid = " & valormarcaid & " AND general_moid= " & valormodeloid, formPrincipal.conexionbd)
  2. formPrincipal.conexdt = New DataTable()
  3. formPrincipal.conexda.Fill(formPrincipal.conexdt)
  4.  
  5. MsgBox(formPrincipal.conexdt.Rows(0)("media_precio"))
  6.  
  7. If (IsDBNull(formPrincipal.conexdt.Rows(0)("media_precio"))) Then
  8.     lbmedia.Text = "No hay vehículos insertados."
  9. Else
  10.     varMedia = formPrincipal.conexdt.Rows(0)("media_precio")
  11.     lbmedia.Text = "El precio medio del modelo " & cbmodelof.Text & " de " & cbmarcaf.Text & " es de " & varMedia & " €."
  12. End If
Prueba y veamos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: bd, medio, mysql, sql, calculadora
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 15:28.