Menos de x coincidencias

Iniciado por XafiloX, 30 Julio 2010, 16:39 PM

0 Miembros y 1 Visitante están viendo este tema.

XafiloX

Hola a todos! Me gustaria saber si con una sentencia mysql se puede conseguir lo siguiente:

Tengo una tabla con dos columnas (entre otras): campo1 y campo2. Y quiero una query que me devuelva campo1 y campo2 en los cuales el numero de campo1 y campo2 iguales (ambos tienen que ser iguales) sea menor de 3 y mayor de 0.

Un ejemplo

Campo1Campo2Otros
115
024
027
258
520
250
252

Esto me deberia devolver dos resultados:
-Campo1=0 y campo2=2
-Campo1=2 y campo2=5


La verdad, no tengo ni idea de si se puede hacer. Pero si fuese posible me solucionaria un gran problema, ya que sino tendria que coger con una query toda la base de datos y luego con otro lenguaje ir procensandolo hasta en contrar las coincidencias, lo cual seria lento...

Os agradeceria cualquier ayuda!

Novlucker

Código (sql) [Seleccionar]
select * from tabla
where Campo1=Campo2 and Campo1>0 and campo1<3


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

XafiloX

Hola, gracias por responder! No era eso a lo que me referia...

Lo que quiero es que me devuelva el campo1 y campo2  de aquellas filas en las que haya más de 0 y menos de 3 filas con campos iguales...Es decir, en el ejemplo anterior (que lo he cambiado para que se entienda mejor), se devolverian:
-Campo1=0 y campo2=2
-Campo1=2 y campo2=5
porque -Campo1=0 y campo2=2 se da en dos filas (más de 0 veces y menos de 3 veces) y -Campo1=2 y campo2=5 se da en 3 filas...

Es complicado de explicar... :xD

Novlucker

Lo acabo de inventar y no tengo donde probar, así que puede que funcione, como que puede que no :xD

Código (sql) [Seleccionar]
select campo1, Campo2, count(*) as total
from tabla
where campo1 = campo2
group by campo1
having total > 0 and total < 3


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

seba123neo

#4
tuve que releer 50 veces el post para entender lo que queres, y sin embargo me quedan dudas  :xD

novlucker te entendio igual que yo al leer tu primer post, donde dijiste que campo1 y campo2 deben ser iguales, pero cuando explicas los resultados, no son iguales campo1 y campo2

si decis:

-Campo1=0 y campo2=2
-Campo1=2 y campo2=5

ahi campo 1 vale 0 y el otro vale 2 , no son iguales...lo que vos queres creo entender es listar simplemente los repetidos, que se repitan entre 0 y 3 veces, pero que los valores no sean iguales...sino el unico que cumpliria con esa condicion seria el primer registro, donde ambos son 1...me explico?

mira el select que te paso novlucker, esta bien salvo que tenes que cambiar los alias del having ya que no se pueden usar alias ahi. y sacale el "WHERE campo1 = campo2" , tambien agrega el campo2 al Group By, sino te tira error, ya que estas usando COUNT(*) arriba y debes agrupar por todo.

quedaria asi:

Código (sql) [Seleccionar]
SELECT campo1, Campo2, COUNT(*) AS total
FROM tabla1
GROUP BY campo1, campo2
HAVING COUNT(*) > 0 AND COUNT(*) < 3
ORDER BY COUNT(*) DESC


ahi te devuelve:

Campo 1          Campo2         Total Repetidas
0                      2                         2
5                      2                         1
1                      1                         1

en todo caso fijate que el ultmo registro tambien entra en la condicion, ya que se repite 1 vez y eso es mayor a 0 y menor a 3...

la ultima linea del select que le agrege simplemente ordena del mayor repetido al menor...


EDITO: revisando tampoco entraria en la lista ese que vos decis que se repite 3 veces ya que vos queres que sea menor a 3 y no igual a 3...si queres que entre la cantidad 3 simplemente cambia y pone "AND COUNT(*) <= 3"

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

XafiloX

Ufff, ¡¡muchisimas gracias a los dos!!

Siento haberme explicado tan mal  :-[

Os agradezco mucho la ayuda. Se ve que estoy muy mal en mysql, tendré que buscarme algún manual, ya que lo unico que se son consultas sencillitas y joins...