Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: XafiloX en 30 Julio 2010, 16:39 pm



Título: Menos de x coincidencias
Publicado por: XafiloX en 30 Julio 2010, 16:39 pm
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!


Título: Re: Menos de x coincidencias
Publicado por: Novlucker en 30 Julio 2010, 16:44 pm
Código
  1. SELECT * FROM tabla
  2. WHERE Campo1=Campo2 AND Campo1>0 AND campo1<3

Saludos


Título: Re: Menos de x coincidencias
Publicado por: XafiloX en 30 Julio 2010, 18:39 pm
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


Título: Re: Menos de x coincidencias
Publicado por: Novlucker en 30 Julio 2010, 20:31 pm
Lo acabo de inventar y no tengo donde probar, así que puede que funcione, como que puede que no :xD

Código
  1. SELECT campo1, Campo2, COUNT(*) AS total
  2. FROM tabla
  3. WHERE campo1 = campo2
  4. GROUP BY campo1
  5. HAVING total > 0 AND total < 3

Saludos


Título: Re: Menos de x coincidencias
Publicado por: seba123neo en 31 Julio 2010, 07:06 am
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
  1. SELECT campo1, Campo2, COUNT(*) AS total
  2. FROM tabla1
  3. GROUP BY campo1, campo2
  4. HAVING COUNT(*) > 0 AND COUNT(*) < 3
  5. 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.


Título: Re: Menos de x coincidencias
Publicado por: XafiloX en 1 Agosto 2010, 20:51 pm
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...