If you added input data, your query and what your expectation were, it would be easies to recreate your situation.
Not sure that my example fully covers your input data but I could get your error and fix it by adding isnull
in SUM(COUNT(isnull(sg.STC_grade,0)))
create table Subjects (Sbj_Id int)
create table Groups (Grp_Id int)
create table Sub_Grp (Grp_id int, Sbj_Id int, STC int, STC_grade int)
insert into Subjects
values
(1),
(2),
(3)
insert into Groups
values
(1),
(2)
insert into Sub_Grp
values
(1,1,1,5),
(1,2,1,15),
(1,2,2,30),
(1,2,3,10),
(2,2,1,20),
(2,3,1,40)
select g.Grp_Id as [Group], s.Sbj_Id as [Subject], sg.STC as [Student], sg.STC_grade
from Groups g
cross apply Subjects s
left join Sub_Grp sg on sg.Grp_Id = g.Grp_id and sg.Sbj_Id = s.Sbj_Id

Highlighted rows from the screen above will ruin the query below without isnull
.
select g.Grp_Id as [Group], s.Sbj_Id as [Subject],
STR(((100.0*COUNT(sg.STC_grade))/SUM(COUNT(isnull(sg.STC_grade,0)))OVER(partition by sg.Sbj_Id)), 5,0) +'%' AS 'PERCENT'
from Groups g
cross apply Subjects s
left join Sub_Grp sg on sg.Grp_Id = g.Grp_id and sg.Sbj_Id = s.Sbj_Id
group by g.Grp_Id,s.Sbj_Id,sg.Sbj_Id
order by s.Sbj_Id, g.Grp_Id
