SQL - Ayuda con consulta

   
Vista:

Ayuda con consulta

Publicado por Sebastian (2 intervenciones) el 20/06/2013 21:26:06
Necesito que me ayuden con la siguiente consulta, no puedo usar sub consultas en la clausula FROM :

Supermercado(idSuper, nombreSuper);
Cliente(idCliente, nombreCliente);
Venta(idSuper, idCliente, monto);

Quiero listar el nombre de los clientes compraron 3 o mas veces en el Supermercado con idSuper=2
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
Imágen de perfil de xve

Ayuda con consulta

Publicado por xve (238 intervenciones) el 20/06/2013 21:42:02
Hola Sebastian, que motor de base de datos estas utilizando?
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 consulta

Publicado por Sebastian (2 intervenciones) el 20/06/2013 22:01:50
Estoy utilizando Oracle XE 11g
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 consulta

Publicado por leonardo_josue (878 intervenciones) el 21/06/2013 17:19:33
Hola Sebastián:

El no usar subconsultas en el FROM ¿es la única restricción?... ¿puedes utilizar subconsultas en el WHERE?

Además me gustaría qué nos dijeras qué es lo que intentaste hacer, (porque supongo que intentaste hacer algo ¿verdad?). Es conveniente que siempre incluyas algo de lo que has hecho, independientemente si marca errores o no funciona como quieres... de esta manera es más fácil indicarte el fallo o mostrarte una alternativa diferente a lo que estás intentado hacer.

En realidad hay varias formas de obtener lo que quieres... sin embargo esto parece una tarea de escuela y como maestro que soy, no veo de buena manera el ponerte cómo sería la respuesta sin ver que has intentado hacerla por tu cuenta... por lo pronto te doy algunos tips.

Supongamos que tienes tu información así (utilizo MySQL, pero sólo utilizo SQL estándar):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> SELECT * FROM venta;
+---------+-----------+-------+
| idSuper | idCliente | monto |
+---------+-----------+-------+
|       1 |         1 | 100   |
|       1 |         2 | 200   |
|       1 |         2 | 300   |
|       2 |         3 | 400   |
|       2 |         3 | 500   |
|       2 |         3 | 600   |
|       2 |         1 | 700   |
|       2 |         2 | 800   |
|       3 |         1 | 900   |
|       3 |         1 | 1000  |
|       3 |         1 | 1100  |
|       3 |         3 | 1200  |
+---------+-----------+-------+
12 rows in set (0.00 sec)


Observa que la tabla VENTA contiene toda la información que necesitas para filtrar a tus clientes... puedes hacer una consulta para determinar las ventas que tiene cada cliente en cada super:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT idSuper, idCliente, COUNT(*)
    -> FROM venta
    -> GROUP BY idSuper, idCliente;
+---------+-----------+----------+
| idSuper | idCliente | COUNT(*) |
+---------+-----------+----------+
|       1 |         1 |        1 |
|       1 |         2 |        2 |
|       2 |         1 |        1 |
|       2 |         2 |        1 |
|       2 |         3 |        3 |
|       3 |         1 |        3 |
|       3 |         3 |        1 |
+---------+-----------+----------+
7 rows in set (0.00 sec)


Para tu caso en concreto lo único que tienes que hacer es agregar los filtros en el WHERE para considerar sólo el idSuper = 2 y utilizar la sección HAVING para considerar sólo aquellos registros que tengaun un COUNT(*) >= 3, es decir, que tengan tres o más comparas para el super en cuestión...

Con esta información, puedes hacer un filtro de tu tablas clientes así:

1
2
3
SELECT  * FROM cliente
WHERE
idCliente IN ( Aquí pones tu subconsulta con todos los criterios)


Haz la prueba, si tienes problemas postea algo de lo que intentaste hacer y con gusto te ayudamos a obtener la consulta.

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