... где кол (кол)> 1 - PullRequest
       49

... где кол (кол)> 1

18 голосов
/ 26 ноября 2009

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

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

Но Оракулу это не понравилось.

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

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

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

Есть идеи?

1 Ответ

43 голосов
/ 26 ноября 2009

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

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

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