SQL - ayuda con consultas

 
Vista:

ayuda con consultas

Publicado por mari (2 intervenciones) el 05/11/2011 01:07:57
hola me pueden ayudar a hacer estas consultas porfavor
tengo las siguientes tablas:
CLIENTES
Cedula /nit cliente
Nombre del cliente
Dirección cliente
Ciudad cliente
Teléfono cliente

VENTA
Cod_venta
Numero factura
Código del producto
Cantidad producto

FACTURA
Numero factura
Fecha factura
Cedula /nit cliente

PRODUCTOS
Código del producto
Categoría producto
Descripción producto
Valor unitario producto

y necesito las sgts consultas porfavor

Relacionar los clientes que han comprado más de 2 Discos Duros. La lista debe tener Cédula, Nombre y cantidad de discos duros.
ESTE LO PENSE HACER ASI:
Select clientes.nit_clie, clientes.nom_clie, venta.cant from venta, clientes, productos where productos.categ=’discos duros’ and productos.cod_pro=venta.cod_pro and venta.cant>2;
PERO NO ME FUNCIONA

Por cliente generar la cantidad total de productos y el valor total de estos productos. Debe generar la cédula, el código del producto, la cantidad de productos y el valor total.
ESTE LO INTENTE ASI:
Select clientes.nit_clie, venta.cod_pro, sum(venta.cant) as cant_prod, sum(productos.vlr_unt*venta.cant) as valor_total from clientes , venta, productos, factura where clientes.nit_clie=factura.nit_clie and factura.cod_fac=venta.cod_fac and venta.cod_pro=productos.cod_pro;
PERO NO ME FUNCIONA TAMPOCO LES AGRADEZCO GRACIAS!
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

ayuda con consultas

Publicado por leonardo_josue (1173 intervenciones) el 07/11/2011 17:17:39
Hola Mari:

Esto suena a tarea de escuela... por lo que me gustaría que tú misma obtuvieras las consultas, aquí te paso algunos tips que te pueden servir.

Para la primer consulta, creo que más que preguntar por la cantidad de unidades vendidas deberías buscar a nivel de registro, es decir, no es lo mismo comprar 2 discos duros de la marca "X" a comprar un disco de la marca "X" y un disco de la marca "Y". para el primer caso podría funcionar la consulta que estás haciendo, pero para la segunda debes buscar otra alternativa.

La función COUNT(*) en unión con GROUP BY y HAVING te puede servir, sería cuestión de que investigaras un poco. No mencionas qué BD estás utilizando, pero observa este ejemplo en MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
mysql> create table tabla (id int, descripcion varchar(15));
Query OK, 0 rows affected (0.09 sec)
 
mysql> insert into tabla values (1, 'uno'), (2, 'uno'), (3, 'uno'), (4, 'dos'),
    -> (5, 'tres'), (6, 'tres');
Query OK, 6 rows affected (0.09 sec)
Records: 6  Duplicates: 0  Warnings: 0
 
mysql> select * from tabla;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | uno         |
|    3 | uno         |
|    4 | dos         |
|    5 | tres        |
|    6 | tres        |
+------+-------------+
6 rows in set (0.02 sec)
 
mysql> select descripcion, COUNT(*) total from Tabla GROUP BY descripcion;
+-------------+-------+
| descripcion | total |
+-------------+-------+
| dos         |     1 |
| tres        |     2 |
| uno         |     3 |
+-------------+-------+
3 rows in set (0.05 sec)
 
mysql> select descripcion, COUNT(*) total from Tabla GROUP BY descripcion
    -> HAVING COUNT(*) >= 2;
+-------------+-------+
| descripcion | total |
+-------------+-------+
| tres        |     2 |
| uno         |     3 |
+-------------+-------+
2 rows in set (0.00 sec)


Observa que en la última consulta utilizo GROUP BY y HAVING para seleccionar sólo los registros que aparecen 2 o más veces... algo parecido tendrías que hacer sobre tu tabla ventas, agrupando por cliente, pero verificando que el producto que se está vendiendo sean disco duros...

Para la segunda consulta, la idea de utilizar el SUM es correcta, pero ESTA TAMBIÉN ES UNA FUNCIÓN DE AGREGACIÓN (como también lo son COUNT, MIN, MAX, AVG, SUM), es decir que necesitas utilizar la cláusula GROUP BY... Es conveniente que le des un vistazo a estas funciones para que veas para qué te sirven y cómo puedes utilizarlas, y si tienes dudas entonces acudir nuevamente a los foros. Finalmente, investiga también acerca de las uniones tipo JOIN (INNER, LEFT Y RIGTH).

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

ayuda con consultas

Publicado por marisol (2 intervenciones) el 08/11/2011 21:13:58
gracias de verdad me ayudo!
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