... em que a contagem (col)> 1

tenho uma mesa como esta:

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

Eu gostaria agora de obter todas as entradas que têm mais de um valor. O resultado esperado seria:

+-----+-------+
| fk  | count |
+-----+-------+
| 1   | 2     |
| ... | ...   |
Tentei conseguir isso assim.
select fk, count(value) from table where count(value) > 1;
Mas a Oracle não gostou.

Então eu tentei isto...

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

...sem sucesso.

Alguma ideia?

Author: Marius Burz, 2009-11-26

1 answers

Utilizar a cláusula having para comparar agregados.

Além disso, você precisa agrupar pelo que você está agregando contra para que a consulta funcione corretamente. O seguinte é um começo, mas como você está faltando um grupo por cláusula ainda não vai funcionar. O que estás a tentar contar?

select fk, count(value) 
from table 
group by fk
having count(value) > 1;
 37
Author: Donnie, 2009-11-26 17:16:28