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?

Foi útil?

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
scroll top