Frage

Ich habe eine Tabelle wie folgt aus:

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

Ich möchte jetzt alle Einträge erhalten, die mehr als einen Wert haben. Das erwartete Ergebnis wäre:

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

Ich habe versucht, das wie folgt zu erreichen:

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

Aber Oracle hat es nicht gefallen.

So habe ich versucht, diese ...

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

... ohne Erfolg.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Mit der having Klausel für Aggregate verglichen wird.

Außerdem müssen Sie zu einer Gruppe von, was Sie aggregieren gegen für die Abfrage richtig zu arbeiten. Im Folgenden ist ein Anfang, aber da Sie eine Gruppe von Klausel fehlt noch wird es nicht ganz funktioniert. Was genau wollen Sie zählen?

select fk, count(value) 
from table 
group by fk
having count(value) > 1;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top