Вопрос

У меня есть такая таблица:

+-----+-----+-------+
| 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;

... безуспешно.

Есть идеи?

Это было полезно?

Решение

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

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

select fk, count(value) 
from table 
group by fk
having count(value) > 1;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top