Foros del Web » Programando para Internet » PHP »

consulta SQL con clausula que incluye SUM()

Estas en el tema de consulta SQL con clausula que incluye SUM() en el foro de PHP en Foros del Web. hola soy nuevo en este foro tengo un problema con una consulta SQL soy algo novato y para mi proyecto final estoy desarrollando una aplicación ...
  #1 (permalink)  
Antiguo 24/05/2015, 20:16
 
Fecha de Ingreso: septiembre-2014
Ubicación: COLOMBIA
Mensajes: 5
Antigüedad: 9 años, 7 meses
Puntos: 0
consulta SQL con clausula que incluye SUM()

hola
soy nuevo en este foro

tengo un problema con una consulta SQL

soy algo novato y para mi proyecto final
estoy desarrollando una aplicación para la gestión y transporte de pedidos
y requiero ver el cierta información del pedido

os explicare rápido

un pedido está compuesto por la información del cliente y el código del pedido
también hay una tabla detalles de pedido en la que se guarda el código del pedido y el código del producto que va con el pedido
un pedido muchos detalles

los pedidos se empaquetan en una encomienda, la cual es transportada por una ruta, un camión y pasa por varias sucursales
cada encomienda tiene la información del vehículo, la ruta (la ruta tiene muchos detalles de ruta cada detalle de la ruta representa una sucursal por donde pasa) y el estado;
cada encomienda tiene detalles, cada detalle de encomienda representa un pedido que está asignado a esa encomienda




SELECT ped.Cod, mun.Nombre AS Destino, SUM(det.Peso_Kg_U * det.Unidades) AS Peso_Kg, est.Descripcion AS Estado
FROM pedido ped
INNER JOIN control_ped con ON con.Cod_Cod_Ped = ped.Cod
INNER JOIN estado_ped est ON est.Cod = con.Estado_Cod_Est
INNER JOIN detalle_ped det ON det.Pedido_Cod_Pedido = ped.Cod
INNER JOIN sucursal suc ON suc.Cod = ped.Destino_Cod_Suc
INNER JOIN ShR shr ON shr.Estacion_Cod_Suc = suc.Cod
INNER JOIN municipio mun ON mun.Cod = suc.Ciudad
WHERE est.Descripcion LIKE 'Cancelado' AND shr.Ruta_Cod_Rut='$codRut' AND SUM(det.Peso_Kg_U * det.Unidades) <= '$capDisp' GROUP BY ped.Cod


tengo que ver esta información para poder asignar los pedidos al la encomienda que los va a ser transportada,
esto teniendo en cuenta que el camión tiene una capacidad máxima, la cual se irá copando a medida que se agreguen nuevos pedidos;
la variable $capDisp es la capacidad disponible en el camión

necesito ver en una lista desplegable los pedidos para poder seleccionarlos y asignarlos
pero no puedo asignar pedidos que excedan la capacidad, por eso no quiero verlos mientras excedan la capacidad
el peso total de un pedido se calcula multiplicando el peso en Kg de cada unidad que pertenece al pedido (Productos) por el total de unidades y posteriormente sumando todos los resultados
"SUM(det.Peso_Kg_U * det.Unidades)"

necesito ver solo los pedidos que la suma de su peso total no exceda la capacidad disponible en el camión
pero la sentencia "WHERE SUM(det.Peso_Kg_U * det.Unidades) <= '$capDisp' " me arroja un error de sintaxis

#1111 - Invalid use of group function

y no se me ocurre otra opción
  #2 (permalink)  
Antiguo 24/05/2015, 20:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: consulta SQL con clausula que incluye SUM()

¿Un problema de SQL en el foro de PHP?

No entiendo la relación.

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 24/05/2015, 20:46
 
Fecha de Ingreso: septiembre-2014
Ubicación: COLOMBIA
Mensajes: 5
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: consulta SQL con clausula que incluye SUM()

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Un problema de SQL en el foro de PHP?

No entiendo la relación.


claro que tiene relación
por si no lo sabes PHP es generalmente se usa comunicar HTML con SQL
entonces si tiene sentido
  #4 (permalink)  
Antiguo 24/05/2015, 20:51
 
Fecha de Ingreso: septiembre-2014
Ubicación: COLOMBIA
Mensajes: 5
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: consulta SQL con clausula que incluye SUM()

Cita:
Iniciado por METALHEADB93 Ver Mensaje
claro que tiene relación
por si no lo sabes PHP es generalmente se usa comunicar HTML con SQL
entonces si tiene sentido
es cierto que el problema no es con php
pero igual, no encontré la sección SQL para hacer mi pregunta
  #5 (permalink)  
Antiguo 24/05/2015, 21:00
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, 4 meses
Puntos: 2658
Respuesta: consulta SQL con clausula que incluye SUM()

Es raro que no lo encontrarás, porque el foro de Bases de Datos General Está bien a la vista, en la página principal...
Supongo que sabes que SQL es el lenguaje de consulta que se usa en BB.DD. , ¿no?

En cualquier caso el error es elemental...

Código MySQL:
Ver original
  1.     ped.Cod,
  2.     mun.Nombre AS Destino,
  3.     SUM(det.Peso_Kg_U * det.Unidades) AS Peso_Kg,
  4.     est.Descripcion AS Estado
  5. FROM pedido ped
  6.     INNER JOIN control_ped con ON con.Cod_Cod_Ped = ped.Cod
  7.     INNER JOIN estado_ped est ON est.Cod = con.Estado_Cod_Est
  8.     INNER JOIN detalle_ped det ON det.Pedido_Cod_Pedido = ped.Cod
  9.     INNER JOIN sucursal suc ON suc.Cod = ped.Destino_Cod_Suc
  10.     INNER JOIN ShR shr ON shr.Estacion_Cod_Suc = suc.Cod
  11.     INNER JOIN municipio mun ON mun.Cod = suc.Ciudad
  12. WHERE est.Descripcion LIKE 'Cancelado'
  13.     AND shr.Ruta_Cod_Rut='$codRut'
  14.     # ------------------------------------------------------------------
  15.     # ESTO ESTA MAL, MUY MAL
  16.     # ------------------------------------------------------------------
  17.     AND SUM(det.Peso_Kg_U * det.Unidades) <= '$capDisp'
  18.     # ------------------------------------------------------------------
  19. GROUP BY ped.Cod

Esa línea está espantosamente mal...

Está completamente prohibido, en todos los DBMS, usar funciones agrupadas como SUM() en el WHERE.
¿Queda claro?
NO puedas usar un SUM(), AVG(), MAX(), MIN(), etc. en el WHERE. NUNCA.

SI necesitas que se evalúe un valor que resultará de la función agregada, se usa el HAVING:

Código MySQL:
Ver original
  1.     ped.Cod,
  2.     mun.Nombre Destino,
  3.     SUM(det.Peso_Kg_U * det.Unidades) Peso_Kg,
  4.     est.Descripcion Estado
  5. FROM pedido ped
  6.     INNER JOIN control_ped con ON con.Cod_Cod_Ped = ped.Cod
  7.     INNER JOIN estado_ped est ON est.Cod = con.Estado_Cod_Est
  8.     INNER JOIN detalle_ped det ON det.Pedido_Cod_Pedido = ped.Cod
  9.     INNER JOIN sucursal suc ON suc.Cod = ped.Destino_Cod_Suc
  10.     INNER JOIN ShR shr ON shr.Estacion_Cod_Suc = suc.Cod
  11.     INNER JOIN municipio mun ON mun.Cod = suc.Ciudad
  12. WHERE est.Descripcion LIKE 'Cancelado'
  13.     AND shr.Ruta_Cod_Rut='$codRut'
  14. GROUP BY ped.Cod
  15. HAVING SUM(det.Peso_Kg_U * det.Unidades) <= '$capDisp'
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 24/05/2015 a las 21:56

Etiquetas: clausula, select, sql, tabla, variable
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:31.