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

count de un distinct

Estas en el tema de count de un distinct en el foro de Bases de Datos General en Foros del Web. Pues eso que ando algo perdidillo He estado buscando aqui en el foro pero o encuentro sobre distinct o sobre count pero no veo la ...
  #1 (permalink)  
Antiguo 15/01/2008, 06:44
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 17 años
Puntos: 3
count de un distinct

Pues eso que ando algo perdidillo

He estado buscando aqui en el foro pero o encuentro sobre distinct o sobre count pero no veo la union de ambos.

Necesito recorrer una tabla y que devuelva los 20 (por ejemplo) registros que mas veces repiten un determinado campo y saber cuantas veces, es decir

posibles registros
hola loquesea...
adios loquesea...
perro loquesea...
hola loquesea...
perro loquesea...
perro loquesea....

deberia devolverme:
hola 2
adios 1
perro 3

pero debe recorrer toda la tabla porque solo quiero los 20 que mas se repitan (en este ejemplo salen todos porque he puesto pocos, claro está)

ademas debería poder añadirle una condición where donde controlar que haga el distinct pero solo si cumple una condición, por ejemplo de fecha superior a tal fecha (la fecha sería uno de los campos "loquesea..."

espero haberme explicado
  #2 (permalink)  
Antiguo 15/01/2008, 07:10
 
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 32
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: count de un distinct

Si cuando haces la consulta, el resultado es:

Código:
----------------------
| NAME | WHATEVER    |
----------------------
| hola | loquesea... |
| adios| loquesea... |
| perro| loquesea... |
| hola | loquesea... |
| perro| loquesea... |
| perro| loquesea... |
----------------------
Podrías usar los GROUP BY .

Por ejemplo en MySQL sería algo como:

SELECT NAME, count(NAME) FROM tabla GROUP BY NAME ORDR BY count(NAME) LIMIT 20

Si usas MySQL, puedes ver el manual aquí: http://dev.mysql.com/doc/refman/4.1/en/index.html

Saludos
  #3 (permalink)  
Antiguo 15/01/2008, 07:45
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 17 años
Puntos: 3
Re: count de un distinct

Gracias _kai_ lo veo lógico, no se por qué me encaminaba siempre a hacer un distinct si puede valer un GROUP by

Lo voy a probar...
  #4 (permalink)  
Antiguo 15/01/2008, 18:20
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 17 años
Puntos: 3
Re: count de un distinct

probado y funciona pero... tengo un problema.

Imagina la tabla con un solo campo pues para esta consulta solo necesito un campo.

Select texto, count(texto) as tt from busca GROUP BY texto ORDER BY count(texto) DESC LIMIT 10

Esto me devuelve correctamente un registro por cada repetido y por los no repetidos y si se repite el campo texto, me los cuenta cuantas veces y me lo dice en "tt". Además, la tupla me devuelve los 10 que mas se repiten, y lo devuelve ordenado de mayor a menor por ese concepto de repeticion.

El caso es que necesito que los ordene alfabeticamente, pero si le cambio el ORDER BY y le pongo ORDER BY texto ASC, ya no me devuelve los que mas se repiten sino los primeros 10 que se encuentra.

Es posible combinar las 2 cosas o se os ocurre alguna idea para esto??

Mil Gracias

Última edición por intergus; 15/01/2008 a las 18:27
  #5 (permalink)  
Antiguo 16/01/2008, 03:18
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Re: count de un distinct

Buenas,

select texto, tt from (
Select texto, count(texto) as tt from busca GROUP BY texto ORDER BY count(texto) DESC LIMIT 10
) foo
order by texto

Un saludo
  #6 (permalink)  
Antiguo 17/01/2008, 10:40
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 17 años
Puntos: 3
Re: count de un distinct

Seyko, lo has bordao...

No hay nada como saber....

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 00:03.