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

Consultas anidadas

Estas en el tema de Consultas anidadas en el foro de Mysql en Foros del Web. Tratare de ser los mas entendible posible, mi consulta es la siguiente: Tengo una pequeña BD en el cual relaciono la tabla VENTA con la ...
  #1 (permalink)  
Antiguo 02/12/2012, 13:38
 
Fecha de Ingreso: noviembre-2012
Ubicación: Villa Maria, Peru
Mensajes: 46
Antigüedad: 12 años, 1 mes
Puntos: 0
Problema con SUM en Mysql

Tratare de ser los mas entendible posible, mi consulta es la siguiente:
Tengo una pequeña BD en el cual relaciono la tabla VENTA con la tabla TIPO_VENTA y con la tabla HOTEL.Hay 3 tipos de venta:
-Por Telefono
-Por Web
-Personalmente
Y tengo mi consulta que es la siguiente:

Código MySQL:
Ver original
  1. SELECT v.id_venta as CODIGO , v.wp_hotel_iddepart,v.wp_tipoventa_idtipo_venta, v.clientev, v.apartamento,v.fecha_real_checkin, v.fecha_real_checkout, v.num_habitaciones, v.num_real_adultos, v.num_real_ninos, v.num_noches,v.procedencia,v.facturado,v.costo_fijos, v.costo_variables ,t.tv_descripcion, h.d_descripcion, v.costo_fijos + v.costo_variables AS 'TOTAL COSTES',
  2. v.facturado - (v.costo_fijos + v.costo_variables) as PROFIT,
  3. round(((v.facturado - (v.costo_fijos + v.costo_variables))/(v.facturado))*100,2) AS PORCENTAJE
  4. FROM wp_venta v
  5. INNER JOIN wp_tipoventa t ON v.wp_tipoventa_idtipo_venta= t.idtipo_venta
  6. INNER JOIN wp_hotel h ON v.wp_hotel_iddepart= h.iddepart
  7. WHERE v.estado_venta ='1' order by v.id_venta desc
En esta consulta uno esas tablas, y genero columnas calculadas, a las cuales ,EN OTRA CONSULTA quiero sumarlas:

Código MySQL:
Ver original
  1. SELECT MONTHNAME(v.fecha_venta) as MES,v.fecha_venta,
  2. SUM(v.facturado),
  3. SUM(v.costo_fijos),
  4. SUM( v.costo_variables),
  5. SUM(v.costo_fijos + v.costo_variables) AS 'TOTAL COSTES',
  6. SUM(v.facturado - (v.costo_fijos + v.costo_variables)) as PROFIT
  7. FROM wp_venta v
  8. INNER JOIN wp_tipoventa t ON v.wp_tipoventa_idtipo_venta= t.idtipo_venta
  9. INNER JOIN wp_hotel h ON v.wp_hotel_iddepart= h.iddepart
  10. WHERE v.estado_venta ='1'
  11. group by MONTHNAME(v.fecha_venta)
  12. order by v.id_venta desc

El problema esta en que tambien tengo que hallar la suma de cada tipo de venta
por ejemplo la suma de las ventas hechas por telefono, por web y personalmente, cada uno en una columna, junto con las otras sumas mencionadas arriba..
No se si me deje entender quedaria algo asi

T_FACT. ---- T_COSTOSFIJOS ----- T_VENTAWEB ----- T_VENTATELEFONO---T_VENTAPERSONAL
550 ---------- 100 -------------- 200 ------------- 300 ------------- 50

Obviamente sumando los 3 tipos de venta me debe de dar el total que 550
Pero no puedo, se me vino a la mente hacer una subconsulta por cada tipo de venta, para que asi me muestre una columna con TODOS LAS VENTAS QUE HAYAN SIDO DEL TIPO WEB y aplicarle el SUM a ese select, pero me bota error:

Código MySQL:
Ver original
  1. SELECT MONTHNAME(v.fecha_venta) as MES,
  2. v.fecha_venta,SUM(v.facturado),
  3.  
  4. v.facturado
  5. FROM wp_venta v
  6. INNER JOIN wp_tipoventa t ON v.wp_tipoventa_idtipo_venta= t.idtipo_venta
  7. WHERE v.estado_venta ='1' and idtipo_venta='2'
  8. order by v.id_venta desc)
  9.  
  10. SUM(v.costo_fijos),
  11. SUM( v.costo_variables),
  12. SUM(v.costo_fijos + v.costo_variables) AS 'TOTAL COSTES',
  13. SUM(v.facturado - (v.costo_fijos + v.costo_variables)) as PROFIT
  14. FROM wp_venta v
  15. INNER JOIN wp_tipoventa t ON v.wp_tipoventa_idtipo_venta= t.idtipo_venta
  16. INNER JOIN wp_hotel h ON v.wp_hotel_iddepart= h.iddepart
  17. WHERE v.estado_venta ='1'
  18. group by MONTHNAME(v.fecha_venta)
  19. order by v.id_venta desc

Última edición por gnzsoloyo; 03/12/2012 a las 03:36 Razón: Código SQL sin etiquetar
  #2 (permalink)  
Antiguo 02/12/2012, 18:37
 
Fecha de Ingreso: noviembre-2012
Ubicación: Villa Maria, Peru
Mensajes: 46
Antigüedad: 12 años, 1 mes
Puntos: 0
Consultas anidadas

Quiero hacer una subconsulta algo asi:

Código MySQL:
Ver original
  1. MONTHNAME( v.fecha_venta ) AS MES,
  2. v.fecha_venta,
  3.  
  4. v.facturado
  5. FROM wp_venta v
  6. INNER JOIN wp_tipoventa t ON v.wp_tipoventa_idtipo_venta= t.idtipo_venta
  7. WHERE v.estado_venta ='1' and idtipo_venta='2'),
  8.  
  9. SUM( v.facturado ) AS facturado ,
  10. SUM( v.costo_fijos ) AS costo_fijos ,
  11. SUM( v.costo_variables ) AS costo_variables ,
  12. SUM( v.costo_fijos + v.costo_variables ) AS 'TOTAL COSTES',
  13. SUM( v.facturado - ( v.costo_fijos + v.costo_variables ) ) AS PROFIT
  14. FROM wp_venta v
  15. INNER JOIN wp_tipoventa t ON v.wp_tipoventa_idtipo_venta = t.idtipo_venta
  16. INNER JOIN wp_hotel h ON v.wp_hotel_iddepart = h.iddepart
  17. WHERE v.estado_venta = '1'
  18. AND MONTHNAME( v.fecha_venta ) = MONTHNAME( NOW( ) )
  19. AND YEAR( v.fecha_venta ) = YEAR( NOW( ) )
  20. GROUP BY MONTHNAME( v.fecha_venta )
  21. ORDER BY v.id_venta DESC


Como ven quiero que la consulta anidada valla en la parte de arriba, y no en el "WHERE"
pero me bota error.

Última edición por gnzsoloyo; 02/12/2012 a las 19:50 Razón: Código SQL sin etiquetar
  #3 (permalink)  
Antiguo 02/12/2012, 19:52
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: Consultas anidadas

Cita:
pero me bota error.
Empecemos por el principio: ¿Qué error?
No podemos adivinar lo que estás leyendo en tu sistema, y para intentar probar de algún modo deberíamos crear las tablas (cuya estructura no conocemos) y llenarlas con datos (que tampoco conocemos) para ver qué error puede ser que te de (ver si es un error manifiesto sería ponerse a revisar una sintaxis que parece algo confusa).
¿No te parece que deberías tomarte cinco minutos y darnos una explicacion más detallada...?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 02/12/2012, 23:00
 
Fecha de Ingreso: noviembre-2012
Ubicación: Villa Maria, Peru
Mensajes: 46
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Consultas anidadas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Empecemos por el principio: ¿Qué error?
No podemos adivinar lo que estás leyendo en tu sistema, y para intentar probar de algún modo deberíamos crear las tablas (cuya estructura no conocemos) y llenarlas con datos (que tampoco conocemos) para ver qué error puede ser que te de (ver si es un error manifiesto sería ponerse a revisar una sintaxis que parece algo confusa).
¿No te parece que deberías tomarte cinco minutos y darnos una explicacion más detallada...?
la explicacion mas detallada esta aca:
http://www.forosdelweb.com/f86/problema-con-sum-mysql-1025948/

Solo que nadie me respondia, quizas por lo extenso de mi explicacion..

Pero quizas no lo leas todo..
mi consulta en todo caso seria, si se pueden hacer consultas anidadas arriba(en el select), o solo se pueden hacer abajo(en las condiciones); porque si se fija en mi query la subconsulta la estoy haciendo arriba :(
El error que me bota es este:

MySQL ha dicho: Documentación
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT
v.facturado
FROM wp_venta v
INNER JOIN wp_tipoventa t ON v' at line 5
  #5 (permalink)  
Antiguo 03/12/2012, 03:35
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: Consultas anidadas

Primero: Nadie te respondió ayer, entre otras cosas, porque era domingo, y también tenemos algo que debes conocer: Vida familiar.
No puedes pretender soluciones un día así... ¿No te parece?

Segundo: No debes abrir dos threads para un mismo tema. Eso puede conllevar sanciones porque está expresamente prohibido en las políticas de uso. En el mejor de los casos se te borrará uno sin aviso ni advertencias. Yo los he fusionado porque el primer post es más detallado y se entiende mejor.
No lo hagas de nuevo. Ten paciencia (no, cinco horas no son paciencia en un día domingo).

Tercero:
- El primer problema es que SUM() no está definido para tomar datos de una subconsulta, porque una subconsulta puede devolver más de un registro, y SUM opera sobre cada registro. El que esa subconsulta esté devolviendo un único registro es irrelevante para el algoritmo que lo implementa.
- Se pueden producir conflictos de alias. No veo evidencia precisa, pero no se descarta.
- Si ya estás usando la tabla de la subconsulta en la consulta principal, entonces ese valor lo debes conseguir modificando esa consulta, y no inventando una operacion que el SQL no te permite.

Personalmente, y o probaría ponerlo así:
Código MySQL:
Ver original
  1. SUM(IF(v.estado_venta ='1' AND idtipo_venta='2', v.facturado, 0))
__________________
¿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: mysql+db, sum, jquery-mobile
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 01:03.