Pregunta

Imagine que tengo una tabla db de clientes que contiene {id, nombre de usuario, nombre, apellido}

Si quiero encontrar cuántas instancias de diferentes nombres puedo hacer:

select firstname,count(*) from Customers group by 2 order by 1;

   username | count(*)
   ===================
   bob      |   1
   jeff     |   2
   adam     |   5

¿Cómo escribo la misma consulta para devolver solo los nombres que aparecen más de una vez? es decir, en el ejemplo anterior solo devuelve las filas para jeff y adam.

¿Fue útil?

Solución

Desea la cláusula having , así:

select 
    firstname,
    count(*) 
from Customers 
group by firstname
having count(*) > 1
order by 1

Otros consejos

group by 2 order by 1 es terrible, debo decir. Utilice los nombres de columna adecuados si eso es compatible: esto mejorará drásticamente la legibilidad.

Con eso en mente,

select firstname, count(*) c 
from Customers 
group by firstname  
having count(*) > 1 -- Kudos to Shannon
order by c;

Eso es lo que hace la cláusula HAVING. No estoy seguro de si esto funcionará en informix, pero inténtelo:

select firstname, count(*) 
from Customers 
group by firstname
HAVING COUNT(*) > 1
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top