Domanda

Ho una tabella come questa:

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

Vorrei ora ottenere tutte le voci che hanno più di un valore. Il risultato atteso sarebbe:

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

Ho cercato di raggiungere questo obiettivo:

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

Ma a Oracle non è piaciuto.

Quindi ho provato questo ...

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

... senza successo.

Qualche idea?

È stato utile?

Soluzione

Utilizza la clausola avente per confrontare gli aggregati.

Inoltre, devi raggruppare in base a ciò che stai aggregando affinché la query funzioni correttamente. Quello che segue è un inizio, ma poiché ti manca ancora una clausola group by, non funzionerà del tutto. Cosa stai esattamente cercando di contare?

select fk, count(value) 
from table 
group by fk
having count(value) > 1;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top