Question

J'ai un tableau comme celui-ci:

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

J'aimerais maintenant avoir toutes les entrées qui ont plus d'une valeur. Le résultat attendu serait:

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

J'ai essayé de réaliser cela comme ceci:

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

Mais Oracle n’a pas aimé.

Alors j'ai essayé ça ...

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

... sans succès.

Des idées?

Était-ce utile?

La solution

Utilisez la clause ayant pour comparer des agrégats.

De plus, vous devez regrouper les éléments sur lesquels vous effectuez l'agrégation pour que la requête fonctionne correctement. Ce qui suit est un début, mais comme il vous manque une clause group by, elle ne fonctionnera pas tout à fait. Qu'est-ce que vous essayez de compter exactement?

select fk, count(value) 
from table 
group by fk
having count(value) > 1;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top