... где count (col)> 1

У меня есть таблица вроде этого:

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

Теперь я хочу получить все записи, которые имеют более одного значения. Ожидаемый результат:

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

Я пытался добиться этого следующим образом:

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

Но Oracle это не понравилось.

Итак, я попробовал это...

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

... без успеха.

Любые идеи?

Ответ 1

Используйте предложение having для сравнения агрегатов.

Кроме того, вам нужно группировать то, что вы агрегируете, чтобы запрос работал правильно. Следующее - это начало, но поскольку вам не хватает позиции group by, все равно это не сработает. Что именно вы пытаетесь подсчитать?

select fk, count(value) 
from table 
group by fk
having count(value) > 1;