Dies ist definitiv falsch:
"Der Count(*) und auch Count(Spalte) ist jeweils ein Count(Distinct, d.h. Duplikate werden NICHT gezählt."

Count(*) zählt alles
Count(Spalte) zählt alles was nicht NULL ist
Count(distinct Spalte) zählt alles was nicht NULL und eindeutig ist.
Dies gilt schon so lange, wie ich SQL mache.
Dies gilt auch für die over()-Funktionen.

Ein "count(*) over(partition by f1, f2) ... group by f1, f2" macht überhaupt keinen Sinn, da das Ergebnis immer 1 ist.
Bei "count(*) over(partition by f1) ... group by f1, f2" ergibt die Zählung die Anzahl der Gruppen F1, allerdings werden dann wieder alle Zeilen ausgegeben.

Ein count(*) over() zählt immer alle Zeilen des Ergebisses.

Die Frage stellt sich nun, was denn genau gezählt werden soll, in der Regel reicht da ein over() ohne einen finalen Group by, da man die Anzahl bestimmter Vorkommen haben will.

Z.B:
select f1, f2
,count(*) over() Gesamtergebniss
,count(*) over(partition by f1) AnzahlGruppenF1
,count(distinct f2) over() AnzahlEindeutigGesamt
from mytable
group by f1, f2

Und was ist gegen eine klassische Prozentrechnung einzuwenden;-)?