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

Una consulta sobre una consulta SQL

Estas en el tema de Una consulta sobre una consulta SQL en el foro de Bases de Datos General en Foros del Web. Hola. Ojlalá álguien pueda decirme como hacer la sgte consulta: Tengo una tabla con los sigientes campos, entre otros: tienda_id, producto_id. si por ejemplo los ...
  #1 (permalink)  
Antiguo 05/07/2004, 19:23
 
Fecha de Ingreso: mayo-2004
Mensajes: 27
Antigüedad: 20 años, 6 meses
Puntos: 0
Exclamación Una consulta sobre una consulta SQL

Hola. Ojlalá álguien pueda decirme como hacer la sgte consulta:

Tengo una tabla con los sigientes campos, entre otros:

tienda_id, producto_id.

si por ejemplo los registros en la tabla fueran estos:

tienda_id producto_id
1.............1.............
2.............2.............
2.............3.............
2.............4.............
3.............5.............
3.............6.............

Necesito una consulta que me devuela lo siguiente:

tienda_id producto_id
2.............2.............
2.............3.............
2.............4.............
3.............5.............
3.............6.............
1.............1.............

es decir, las tiendas y los productos ordenados desde las tiendas con más productos hasta las tiendas con menos productos. He intentado de mil formas pero nunca me sale. Espero que alguien pueda ayudarme.
  #2 (permalink)  
Antiguo 06/07/2004, 00:12
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 20 años, 5 meses
Puntos: 0
Puede ser algo así:

SELECT tienda_id, producto_id FROM tabla INNER JOIN (SELECT Count(producto_id) AS Cuenta, tienda_id FROM tabla GROUP BY tienda_id) AS cns ON tabla.tienda_id=cns.tienda_id ORDER BY Cuenta
  #3 (permalink)  
Antiguo 06/07/2004, 16:54
 
Fecha de Ingreso: mayo-2004
Mensajes: 27
Antigüedad: 20 años, 6 meses
Puntos: 0
Exclamación No me funcionó

Hola. Traté de hacerlo de esa manera en el phpMyAdmin, cambiando 'tabla' por el nombre de mi tabla, pero me bota un error de sintaxis. ¿Todos los servers de SQL admiten usar un SELECT anidado? ¿Qué puede estar fallando?
  #4 (permalink)  
Antiguo 07/07/2004, 01:18
 
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 8 meses
Puntos: 0
Hola,
yo solo se que mysql3.x no acepta selects anidados (lo pone en un mensaje de este foro)
  #5 (permalink)  
Antiguo 07/07/2004, 11:59
 
Fecha de Ingreso: mayo-2004
Mensajes: 27
Antigüedad: 20 años, 6 meses
Puntos: 0
Pero yo tengo la version 4!!
  #6 (permalink)  
Antiguo 07/07/2004, 17:20
 
Fecha de Ingreso: mayo-2004
Mensajes: 27
Antigüedad: 20 años, 6 meses
Puntos: 0
Hola. Tengo la versión 4 de MySql. Traté de ejecutar la sgte consulta:

SELECT * FROM (SELECT campo FROM tabla);

Y me botó un error de sintaxis. Alguien sabe por qué puede ser????
  #7 (permalink)  
Antiguo 08/07/2004, 01:00
 
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 8 meses
Puntos: 0
Hola,
despues del FROM debe haber una tabla, no un campo.
  #8 (permalink)  
Antiguo 09/07/2004, 12:01
 
Fecha de Ingreso: mayo-2004
Mensajes: 27
Antigüedad: 20 años, 6 meses
Puntos: 0
¿Ninguna otra idea? Todavía no resuelvo mi problema...
  #9 (permalink)  
Antiguo 09/07/2004, 13:40
 
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 8 meses
Puntos: 0
para ver si acepta selects anidados, prueba esto:

select tabla.campo from tabla where campo in (select tabla.campo from tabla)

es una chorrada de consulta, pero a ver si te funcionan los selects anidados
  #10 (permalink)  
Antiguo 10/07/2004, 04:37
 
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 8 meses
Puntos: 0
A ver que tal esto:

Obtenemos el nº de productos por cada tienda en orden descendente (o ascendente, no lo se, en cualquier caso que te devuelva de los que tienen más a los que tienen menos) y despues que ordene segun el id del producto

select tienda_id as t_id, producto_id as p_id, count(producto_id) as n_prod from tabla group by tienda_id order by n_prod desc, p_id;

(ahora no me acuerdo de la sintaxis exacta de si se pondría ahi DESC, pero esa es la idea)

si no te funciona, prueba con hacer una consulta y despues recorrerla con un bucle y hacer algun procesamiento de la consulta dentro del bucle.

suerte
  #11 (permalink)  
Antiguo 10/07/2004, 17:06
 
Fecha de Ingreso: junio-2004
Mensajes: 11
Antigüedad: 20 años, 5 meses
Puntos: 0
Confirmando solucion de Atzeneta

Cita:
Iniciado por Atzeneta
Puede ser algo así:

SELECT tienda_id, producto_id FROM tabla INNER JOIN (SELECT Count(producto_id) AS Cuenta, tienda_id FROM tabla GROUP BY tienda_id) AS cns ON tabla.tienda_id=cns.tienda_id ORDER BY Cuenta
Saludos amigos:

Probé la solución sugerida por Atzeneta en un gestor MSSQL y funcionó tal cual los requerimientos.

Ahora bien, no estaria de mas explicar cada paso de la instrucción para asi aclarar el por que no te funciona con esta sintaxis.

SELECT tabla.tienda_id, tabla.producto_id
FROM tabla INNER JOIN
(SELECT subconsulta.tienda_id, COUNT(subconsulta.producto_id) AS Cuenta_Productos
FROM Tabla AS SubConsulta
GROUP BY SubConsulta.tienda_id) AS Tabla2
ON tabla.tienda_id = Tabla2.tienda_id
ORDER BY Tabla2.Cuenta_Productos DESC

Última edición por taU.Rus; 10/07/2004 a las 17:08
  #12 (permalink)  
Antiguo 10/07/2004, 18:27
 
Fecha de Ingreso: mayo-2004
Ubicación: Guadalajara, México
Mensajes: 50
Antigüedad: 20 años, 6 meses
Puntos: 0
Cita:
Iniciado por jsoldi
Pero yo tengo la version 4!!

No son selects anidados son subconsultas, y no los soporta mysql todavia ni en la versión 4, trata cambiando tu consulta por otra que te de los mismos resultados casi siempre hay, prueba con left join.
__________________
JAEC
  #13 (permalink)  
Antiguo 16/02/2011, 13:58
 
Fecha de Ingreso: febrero-2011
Mensajes: 1
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Una consulta sobre una consulta SQL

mira la solucion es facil y es colocarle apodos a las tablas ej:


select a.id_tienda, b.id_producto
from tienda a,
producto b
y ya y si quieres que no se repitan los campos pues le colocas un inner join
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 23:00.