... onde count (col)> 1
Pergunta
Eu tenho uma tabela como esta:
+-----+-----+-------+
| id | fk | value |
+-----+-----+-------+
| 0 | 1 | peter |
| 1 | 1 | josh |
| 3 | 2 | marc |
| ... | ... | ... |
Gostaria agora de obter todas as entradas que têm mais de um valor. O resultado esperado seria:
+-----+-------+
| fk | count |
+-----+-------+
| 1 | 2 |
| ... | ... |
Eu tentei conseguir isso como este:
select fk, count(value) from table where count(value) > 1;
Mas a Oracle não gostou.
Então, eu tentei isso ...
select * from (
select fk, count(value) as cnt from table
) where cnt > 1;
... sem sucesso.
Todas as idéias?
Solução
Use a cláusula having
para comparar agregados.
Além disso, você precisa grupo por que você está agregando contra para a consulta para funcionar corretamente. O seguinte é um começo, mas desde que você está perdendo um grupo pela cláusula ainda não vai muito trabalho. O que exatamente você está tentando contar?
select fk, count(value)
from table
group by fk
having count(value) > 1;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow