sql
3 seguidores
Tengo una preguntilla: imaginad una tabla de una base de datos con 3 campos: c1,c2,c3
como seria la consulta que me devolviese el valor que mas veces saliera en esos 3 campos.
EJ
c1 c2 c3
1 2 4
4 1 4
4 5 6
7 4 4
Tendria que devolver 4 ya que aparece 6 veces.
Besos y abrazos a todos los foraneos.
pau
Hola Neopolita,
no se que base de datos estas utilizando (PHP, Access, SQLServer, Oracle, ...) como al SQL estándar cada cual le añade lo que le da la gana ... pues la solución a tu problema puede variar un poco y se te puede complicar.
La solución más bruta que funciona en SQLServer pero que me parece que no funciona en el resto es la siguiente:
(Suponiendo que tu tabla se llama kk)
<code>select top 1 numero, sum(veces)
from
(
select c1 as numero, count(*) as veces from kk
group by c1
union
select c2 as numero, count(*) as veces from kk
group by c2
union
select c3 as numero, count(*) as veces from kk
group by c3
) as datos
group by numero
order by 2 desc</code>
Esta solución está bien, pero no todos los motores aceptan meter una <em>SELECT</em> dentro de la cláusula <em>FROM</em>. Si ese es tu caso, entonces deberás crear una vista con esa SELECT. Algo así como:
<code>CREATE VIEW cuentaKK as
select c1 as numero, count(*) as veces from kk
group by c1
union
select c2 as numero, count(*) as veces from kk
group by c2
union
select c3 as numero, count(*) as veces from kk
group by c3</code>
Y la SELECT original se transforma en:
<code>select top 1 numero, sum(veces)
from cuentaKK
group by numero
order by 2 desc</code>
que si que corresponde a un SQL estándar.
Ahhh!!!, por cierto. Te puede pasar que tu motor tampoco acepte la cláusula <em>TOP n ...</em>, busca en la ayuda de tu motor si hay otra similar y si no, puedes hacer la <em>SELECT</em> tal cual y solo leer un registro (el primero).
Ya nos contarás que tal
Pau
Neopolita
Uso php con mysql y no consigo implementar la solucion tal como tu me la das, podrias darme alguna ideita, muchisimas gracias.
iboff
Me doy capones ya que lo que estas buscando lo estudie en estadistica hace años....
Se llama Moda ( def.es el valor que mas se repite)
Y en programacion de base de datos con sql la sabiamos hallar como tu lo pides....
a ver si mañana en el curro te lo miro.......
ufff.....es como cuando no te acuerdas del nombre de una peli y no puedes dormir....jejeje