SQL - ayuda en consulta group by

   
Vista:

ayuda en consulta group by

Publicado por karla nayeli (4 intervenciones) el 27/08/2014 20:14:28
Hola tengo un problema con una consulta sql que estoy realizando, quiero sacar las ventas totales de articulos agrupadas por linea de articulo, mi duda es que en las tablas que tengo no hay un campo que tenga el total de cada venta, lo calculo haciendo la multiplicacion de la cantidad por el precio, aun no entiendo como hacer para que el resultado de esa multiplicacion lo agrupe por linea y me aparezca la suma total mi consulta es la siguiente:
SELECT DOCTOS_PV.CAJA_ID, DOCTOS_PV.FOLIO, DOCTOS_PV.FECHA, DOCTOS_PV.HORA, DOCTOS_PV.CAJERO_ID, DOCTOS_PV.ESTATUS, DOCTOS_PV_DET.CLAVE_ARTICULO, DOCTOS_PV_DET.UNIDADES, DOCTOS_PV_DET.PRECIO_UNITARIO_IMPTO, ARTICULOS.LINEA_ARTICULO_ID, LINEAS_ARTICULOS.NOMBRE, DOCTOS_PV_DET.UNIDADES*DOCTOS_PV_DET.PRECIO_UNITARIO_IMPTO AS TOTAL
FROM DOCTOS_PV, DOCTOS_PV_DET, ARTICULOS, LINEAS_ARTICULOS
WHERE DOCTOS_PV.CAJA_ID BETWEEN 1628 AND 40362

Y ME DA ESTE RESULTADO:

Dibujo

aun no entiendo como sacar el resultado agrupado por campo NOMBRE y que me de la sumatoria de TOTAL

espero me puedan ayudar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ayuda en consulta group by

Publicado por leonardo_josue (880 intervenciones) el 27/08/2014 21:04:50
Hola karla nayeli:

Vayamos por partes, en primer lugar no nos dices cuál es la estructura de tus tablas ni como están relacionadas, por lo tanto es algo complicado entender tu consulta. Es mejor que comiences por explicar cómo es cada una de tus tablas y que pongas algunos datos de ejemplo de cada una de ellas. A partir de estos datos, puedes decirnos qué es lo que esperas como salida, así podemos darte una opción para la consulta. Sin embargo tengo que hacer algunas observaciones con respecto a la consulta que pones, ya que tienes varias cosas que están mal.

1. En tu sección FROM estás colocando tres tablas (DOCTOS_PV, DOCTOS_PV_DET, ARTICULOS, LINEAS_ARTICULOS), sin embargo en la sección WHERE NO ESTÁS COLOCANDO NINGUNA RELACIÓN, por lo tanto se está haciendo un PRODUCTO CARTESIANO entre las tablas. Observa este ejemplo:

Supongamos que tienes estas dos tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> SELECT * FROM tabla1;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    3 | tres        |
+------+-------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla2;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    4 | cuatro      |
+------+-------------+
3 rows in set (0.00 sec)

Ahora bien, supongamos que quieres relacionar el id=1 de tu tabla1 con la tabla 2, haciendo la analogía a lo que tú estás haciendo, tendrías algo como esto:

1
2
3
4
5
6
7
8
9
mysql> SELECT * FROM tabla1, tabla2 WHERE tabla1.id = 1;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | uno         |
|    1 | uno         |    2 | dos         |
|    1 | uno         |    4 | cuatro      |
+------+-------------+------+-------------+
3 rows in set (0.00 sec)

es decir, el registro con id=1 de la tabla SE RELACIONA CON CADA UNO DE LOS REGISTROS DE LA TABLA2, esto es porque NO SE ESPECIFICA NINGUNA RELACIÓN ENTRE LAS TABLAS, que es lo que estoy comentando... En lugar de hacer esto, deberías hacer algo asi:

1
2
3
4
5
6
7
8
9
mysql> SELECT * FROM tabla1, tabla2
    -> WHERE tabla1.id = tabla2.id
    -> AND tabla1.id = 1;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | uno         |
+------+-------------+------+-------------+
1 row in set (0.00 sec)

Observa que en la sección WHERE estoy colocando la relación que existe entre ambas tablas: tabla1.id = tabla2.id.

Es recomendable que en lugar de hacer las uniones de esta manera utilices JOIN's, ya que son más eficientes y te evitan este tipo de errores:

1
2
3
4
5
6
7
8
9
mysql> SELECT * FROM tabla1
    -> INNER JOIN tabla2 ON tabla1.id = tabla2.id
    -> WHERE tabla1.id = 1;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | uno         |
+------+-------------+------+-------------+
1 row in set (0.00 sec)

El resultado es exactamente el mismo, pero la consulta es óptima.

2. Hablas de AGRUPACION y de SUMA, sin embargo en tu consulta no manejas la cláusula GROUP BY, ni la función de agrupación SUM. Te recomiendo que si no sabes cómo se usan estas funciones, le preguntes a SAN GOOGLE por algunos ejemplos, él es muy sabio y por lo general siempre tiene la respuesta.

3. Todos los Manejadores de base de Datos, manejan su propia sintaxis y sus propias funciones, por lo que es muy importante que nos digas con qué motor estás trabajando, así como la versión y/o edición de la misma.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar