SQL ¿Cómo quedarme con la fila del número mayor?

varuk

Buenas.

Tengo esta consulta:

SELECT nombre, COUNT (*) AS numero_total
FROM TABLA
WHERE nombre IS NOT NULL
GROUP BY nombre;

Eso me crea una tabla así:

nombre numero_total


paquito 2
perico 4
antonio 1
carmen 1

¿Cómo podría hacer para quedarme siempre con la fila de mayor número? (o los de mayor número si son 2 o más)

Gracias ^^

PandragoQ

#1 Prueba con esto....

select nombre, count(nombre)
from tabla where nombre is not null
group by nombre
having count(nombre) =
( select max(cnt) from
( select nombre, count(nombre) cnt
from tabla
group by nombre
)
);

3 respuestas
varuk

#2 gracias pandragoQ . Mañana lo pruebo y te digo.

Edit. Vale ya lo he probado. Va perfecto . Muchas gracias ^^ (no he podido esperar a mañana y he encendido el ordenador... si no mi mente no se iba a gusto a dormir)
Gracias de nuevo ^. Repasaré el Having.

1 respuesta
SiNSoNiDo

#2 #3 Tengo una duda, no sería más simple esto?

SELECT nombre, COUNT (*) AS numero_total
FROM TABLA
WHERE nombre IS NOT NULL
GROUP BY nombre ORDER BY numero_total DESC LIMIT 0,1;

¿Es incorrecto? Pregunto lo de incorrecto por si es que esta consulta recargaría más la BD que la que puso PandragoQ, que no lo sé.

1 respuesta
varuk

#4 SinSoNido ¿Qué es exactamente el "DESC LIMIT 0,1"? Entiendo el "DESC" pero no el "Limit 0,1" ese. ¿Ese limit significa que saque entre 0 y 1 fila?

BLZKZ

con limit 1 mejor que con 0,1

Ordena de mayor a menor por numero_total y coges el primero.

1 respuesta
varuk

#6 ¿Y si hubiera varios con el número máximo? ¿Eso ya sería mucho rizar el rizo?

1 respuesta
BLZKZ

#7 seria como #2 , aunque hay otras formas pero ahora mismo me pillas porque hace tiempo que no toco esto

Por cierto el 0,1 significa desde la posicion 0 coger 1 elemento.

varuk

am ok ok, gracias.

De todas formas estoy en Oracle y ahí no me vale el LIMIT. Hay que hacerlo así (es un ejemplo que he sacado de una web)

select * from ( SELECT periodo FROM ipc WHERE cierre = ‘si’ ORDER BY periodo DESC ) where rownum = 1;

Usuarios habituales

  • varuk
  • BLZKZ
  • SiNSoNiDo
  • PandragoQ