У меня есть Oracle база данных, личные данные. У меня есть child_flag от children и family_id для всех членов семьи. что-то вроде:
ID | birth_date | gender |....| child_flag | family_id
1111 | 2/3/1974 | M |....| 0 | 1122
1122 | 3/2/1970 | F |....| 0 | 1122
1133 | 4/4/2000 | F |....| 1 | 1122
1144 | 5/5/2001 | F |....| 1 | 1122
1155 | 6/6/2003 | M |....| 1 | 1122
Я хочу добавить новый столбец, содержащий количество дочерних элементов (child_flag = 1) только для строк родителей (child_flag = 0).
ID | birth_date | gender |....| child_flag | family_id | childer_num
1111 | 2/3/1974 | M |....| 0 | 1122 | 3
1122 | 3/2/1970 | F |....| 0 | 1122 | 3
1133 | 4/4/2000 | F |....| 1 | 1122 | 0
1144 | 5/5/2001 | F |....| 1 | 1122 | 0
1155 | 6/6/2003 | M |....| 1 | 1122 | 0
....
лучший результат, который я получил, был
select *,
case when child_flag=0 then count (ID) over (partition by family_id) else 0 end as chilrden_num
from my_table
Это дает мне 5 в родительской строке и 0 в дочерней строке. Но я хочу считать только ребенка (и получил 3). сокращение 2 от суммы не хорошо, потому что у меня может быть 0 или 1 родительская строка.
есть идеи, как это сделать (желательно без подзапроса)?