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

como puedo seleccionar la fila que mas se repita?

Estas en el tema de como puedo seleccionar la fila que mas se repita? en el foro de Mysql en Foros del Web. Hola que tal, miren tengo la siguiente Tabla |IDtransaction| |IDfile| |IDcampania| |Addr| |send| en campo IDtransaction es autonumerico el campo IDfile hace referencia a un ...
  #1 (permalink)  
Antiguo 24/04/2008, 00:29
 
Fecha de Ingreso: agosto-2005
Mensajes: 5
Antigüedad: 18 años, 8 meses
Puntos: 0
Pregunta como puedo seleccionar la fila que mas se repita?

Hola que tal, miren tengo la siguiente Tabla

|IDtransaction| |IDfile| |IDcampania| |Addr| |send|

en campo IDtransaction es autonumerico
el campo IDfile hace referencia a un id unico de un producto
IDcampania hace referencia a que familia pertenece ese producto
addr es una direccion ip
send es la fecha donde se realizo la transaccion


Cuando se realiza una transaccion se inserta una nueva fila en la tabla, donde IDtransaction, Addr, Send almacenan valores unicos y que no se repiten, pero en cambio IDfile, IDcampania almacenan valores que si se pueden repetir

entonces supongamos que tengo los siguientes datos

|IDtransaction| |IDfile| |IDcampania| |Addr| |send|

...1.... ... 5... ...7... ...a... ...17-may...

...2... ...5... ...7... ...b... ...18-may...

...3... ...8... ...7... ...c ... ...19-may...

...4... ...5... ...7... ...f... ...20-may...

...5.. ...2... ...8... ...g... ...21-may...


el problema que quiero es que para motivos estadisticos quiero sacar por ejemplo que producto fue el mas vendido de una campaña

por ejemplo quiero saber que producto fue el mas vendido de la campaña 7,
hago un select de la siguiente forma

select * from tabla where IDcampania=7

y me arroja todos los registros pertenecientes a esa campaña, pero no se como discriminar para que me arroje el IDfile del producto mas vendido (en este caso el producto con idfile =5 que como pueden ver es el que mas se repite) y tambien como discriminar para que me arroje el id del producto menos vendido
  #2 (permalink)  
Antiguo 24/04/2008, 09:31
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: como puedo seleccionar la fila que mas se repita?

que te sirva....

Código:
SELECT top 1 idfile, Count(*) AS ventas
     FROM tabla
WHERE IDcampania=7
GROUP BY idfile
ORDER BY Count(*) DESC;
Quim
  #3 (permalink)  
Antiguo 24/04/2008, 09:50
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: como puedo seleccionar la fila que mas se repita?

La consulta de Quim es la correcta, pero conviene avisarte de que si, por ejemplo, dos productos han sido vendidos en la misma cantidad durante esa campaña y esa cantidad es la máxima, la consulta te mostrará sólo uno de ellos.
Otra cosa, para MySQL sustituye el top 1 por LIMIT 1 al final de la consulta:
SELECT idfile, Count(*) AS ventas
FROM tabla
WHERE IDcampania=7
GROUP BY idfile
ORDER BY Count(*) DESC LIMIT 1;

Nos olvidábamos: si quieres sacar el mínimo, lo mismo pero quitando el DESC sin más o poniendo en su lugar ASC. Pero te encontrarás con el mismo problema.
Quim,
una consulta para alguien con tu experiencia: sé que esta consulta que lanzo ahora es un verdadero problema, me refiero a poder sacar mediante una única consulta la lista por IDcampania con su máximo por producto. La verdad que es un reto, pues he visto en internet varias preguntas sobre la imposibilidad del Max(count())...
Yo, la verdad, he desistido.

Saludos

Última edición por jurena; 24/04/2008 a las 10:02
  #4 (permalink)  
Antiguo 24/04/2008, 11:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: como puedo seleccionar la fila que mas se repita?

Provocador Jurena le voy a dar una par de vueltas.... pero ... mi experiencia no debe llegar tan lejos.

Con consultas anidadas debe salir pero con una sola consulta y sql standard.... no se.

Una consulta que cuente y ordene desc y una que sobre la primera que saque el first de cada grupo...o algo asi pero eso ya no seria una sola consulta....

Quim
  #5 (permalink)  
Antiguo 25/04/2008, 11:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: como puedo seleccionar la fila que mas se repita?

jurena,

No es muy elegante pero funciona!!!

Código:
CREATE TABLE  `vendes` (
  `idvenda` int(11) NOT NULL auto_increment,
  `idcampanya` int(11) NOT NULL,
  `idproducte` int(11) NOT NULL,
  PRIMARY KEY  (`idvenda`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO vendes (idcampanya,idproducte) VALUES(1,1);
INSERT INTO vendes (idcampanya,idproducte) VALUES(1,1);
INSERT INTO vendes (idcampanya,idproducte) VALUES(1,1);
INSERT INTO vendes (idcampanya,idproducte) VALUES(1,2);
INSERT INTO vendes (idcampanya,idproducte) VALUES(1,3);
INSERT INTO vendes (idcampanya,idproducte) VALUES(2,2);
INSERT INTO vendes (idcampanya,idproducte) VALUES(2,2);
INSERT INTO vendes (idcampanya,idproducte) VALUES(2,2);
INSERT INTO vendes (idcampanya,idproducte) VALUES(2,1);
INSERT INTO vendes (idcampanya,idproducte) VALUES(2,3);
INSERT INTO vendes (idcampanya,idproducte) VALUES(3,3);
INSERT INTO vendes (idcampanya,idproducte) VALUES(3,3);
INSERT INTO vendes (idcampanya,idproducte) VALUES(3,3);
INSERT INTO vendes (idcampanya,idproducte) VALUES(3,2);
INSERT INTO vendes (idcampanya,idproducte) VALUES(3,1);

select sv.idcampanya,vp.idproducte,vp.vendes
from
(select v.idcampanya,max(v.vendes) as vendes
  from
    (select v1.idcampanya,v1.idproducte,count(*) as vendes
          from vendes v1
          group by v1.idcampanya, v1.idproducte
          order by count(*)) v
group by idcampanya) sv
INNER JOIN
(select v2.idcampanya,v2.idproducte,count(*) as vendes
          from vendes v2
          group by v2.idcampanya, v2.idproducte) vp
on sv.idcampanya=vp.idcampanya and sv.vendes=vp.vendes;
Si en una campanya hay dos top ventas saldran los dos...

Creo recordar que en ORACLE se puede usar un campo de una subquerry como parametro de otra subquerry con lo que lo podriamos hacer mas elegante, pero en MySql no he encontrado la forma.

Con un solo SELECT creo que no se puede...

Quim
  #6 (permalink)  
Antiguo 25/04/2008, 11:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: como puedo seleccionar la fila que mas se repita?

brillante, Quim
seguiré "provocando": es mi modo de aprender

Gracias

Última edición por jurena; 25/04/2008 a las 11:58
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:12.