SQL - DONDE AGREGAR > 1
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.
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