Pregunta

Tengo una tabla como esta:

+-----+-----+-------+
| id  | fk  | value |
+-----+-----+-------+
| 0   | 1   | peter |
| 1   | 1   | josh  |
| 3   | 2   | marc  |
| ... | ... | ...   |

Ahora me gustaría obtener todas las entradas que tengan más de un valor. El resultado esperado sería:

+-----+-------+
| fk  | count |
+-----+-------+
| 1   | 2     |
| ... | ...   |

Intenté lograr eso así:

select fk, count(value) from table where count(value) > 1;

Pero a Oracle no le gustó.

Así que probé esto ...

select * from (
    select fk, count(value) as cnt from table
) where cnt > 1;

... sin éxito.

¿Alguna idea?

¿Fue útil?

Solución

Use la cláusula having para comparar agregados.

Además, debe agrupar por lo que está agregando para que la consulta funcione correctamente. Lo siguiente es un comienzo, pero como te falta un grupo por cláusula, no funcionará. ¿Qué es exactamente lo que estás tratando de contar?

select fk, count(value) 
from table 
group by fk
having count(value) > 1;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top