UTNianos

Versión completa: Consulta Ejercicio Practica SQL
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola a tod@s gente copada del foro!

Les pido ayuda con un ejercicio que no me sale, curse la materia en el 2010 y estoy un poco oxidado...wall

Ejercicio 15 de la practica actual:

Escriba una consulta que retorne los pares de productos que hayan sido vendidos
juntos (en la misma factura) más de 500 veces. El resultado debe mostrar el código
y descripción de cada uno de los productos y la cantidad de veces que fueron
vendidos juntos. El resultado debe estar ordenado por la cantidad de veces que se
vendieron juntos dichos productos. Los distintos pares no deben retornarse más de
una vez.

y yo lo resuelvo de esta forma:

select p1.prod_codigo, p1.prod_detalle, p2.prod_codigo, p2.prod_detalle, COUNT (*) as Cantidad

from Producto p1, Producto p2, Item_Factura i, Item_Factura i2

where p1.prod_codigo=i.item_producto and
p2.prod_codigo=i2.item_producto and
i.item_numero=i2.item_numero and
p1.prod_codigo != p2.prod_codigo

group by p1.prod_codigo, p1.prod_detalle, p2.prod_codigo, p2.prod_detalle

having COUNT (*) > 500

y me devuelve esto:
00001718 PHILIPS MORRIS KS 00001705 PHILIPS MORRIS BOX 10 562
00001705 PHILIPS MORRIS BOX 10 00001718 PHILIPS MORRIS KS 562
00001731 MARLBORO KS 00001718 PHILIPS MORRIS KS 507
00001718 PHILIPS MORRIS KS 00001731 MARLBORO KS 507

como hago para eliminar los repetidos, ya que distinct no lo hace....

gracias desde ya !

Saludos =)
pasá las tablas
Si siempre muestra todos los pares repetidos, quiero decir, si te devuelve n filas y vos quisieras n/2, se me ocurre que podés cambiar la cuarta condición

p1.prod_codigo != p2.prod_codigo

por esta otra:

p1.prod_codigo < p2.prod_codigo

(si los códigos son integers).

Saludos
No sé mucho de SQL, así que tomá todo lo que te digo con pinzas.

Los resultados aparecen dos veces porque estas cruzando los datos de la tabla consigo misma... no sería más fácil hacer que cuente las ocurrencias de cada par de productos? Supongo que habría que probar que es más rápido...
(24-07-2014 21:44)eugenio escribió: [ -> ]Si siempre muestra todos los pares repetidos, quiero decir, si te devuelve n filas y vos quisieras n/2, se me ocurre que podés cambiar la cuarta condición

p1.prod_codigo != p2.prod_codigo

por esta otra:

p1.prod_codigo < p2.prod_codigo

(si los códigos son integers).

Saludos

sii correctisimo ! que grande!....gracias che!
más allá del ejercicio, te recomiendo usar JOINS en lugar del producto cartesiano de tablas, es mucho más rápido y eliminás los repetidos o manejas los null de forma más simple.
(24-07-2014 22:27)Vallo escribió: [ -> ]más allá del ejercicio, te recomiendo usar JOINS en lugar del producto cartesiano de tablas, es mucho más rápido y eliminás los repetidos o manejas los null de forma más simple.

los motores (como la gente) se dan cuenta y hacen inner join.
(24-07-2014 22:31)Dem0 escribió: [ -> ]
(24-07-2014 22:27)Vallo escribió: [ -> ]más allá del ejercicio, te recomiendo usar JOINS en lugar del producto cartesiano de tablas, es mucho más rápido y eliminás los repetidos o manejas los null de forma más simple.

los motores (como la gente) se dan cuenta y hacen inner join.

ah mirá vos. Recuerdo que en el tp de datos había hecho el producto cartesiano en el "script inicial" y tardaba como quince min...lo cambié por un inner join y modifiqué el where, y bajó a 3 minutos. Estuve 10 minutos asombrado (?
¿qué db era?

(en realidad no es el "motor" el que lo interpreta como inner join, sino el optimizador)
sql server express usando el management studio. el tp de la cátedra
Tirando un off: En que materia cursas sql en la carreara?
Si no pasas las tablas es medio complicado entender las cosas =P
(25-07-2014 00:40)Delshire escribió: [ -> ]Tirando un off: En que materia cursas sql en la carreara?

gestión de datos en tercer año
(25-07-2014 01:00)Alex! escribió: [ -> ]Si no pasas las tablas es medio complicado entender las cosas =P

serían:

Producto: prod_codigo(PK), prod_detalle
Item_Factura: item_numero(PK), item_producto(PK)
Recién ahora entiendo por qué funcionó. jajajaj

Que bueno que haya motores 'como la gente'.
URLs de referencia