E.g.:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(student_id INT NOT NULL
,course_code VARCHAR(12) NOT NULL
,pct INT NOT NULL
,symbol CHAR(3) NOT NULL
,GPA INT NOT NULL
,Condition_1 CHAR(1) NOT NULL
,Condition_2 CHAR(1) NOT NULL
,PRIMARY KEY(student_id,course_code)
);
INSERT INTO my_table VALUES
(1004 ,'STA2', 55, '3' ,24 ,'Y' ,'Y'),
(1004 ,'Psy1', 67, '2-' ,24 ,'n' ,'Y'),
(1005 ,'CS3', 67, '2-' ,36 ,'Y' ,'Y'),
(1005 ,'ECO3', 70, '2+' ,18 ,'Y' ,'N'),
(1005 ,'GAM1', 77, '1' ,24 ,'Y' ,'Y'),
(1005 ,'GAM2', 55, '3' ,36 ,'Y' ,'Y'),
(1005 ,'MAM3', 52, '3' ,36 ,'Y' ,'Y');
SELECT x.student_id
, COUNT(*) other_courses_total
FROM my_table x
JOIN my_table y
ON y.course_code <> x.course_code
AND y.student_id = x.student_id
WHERE y.course_code = 'Psy1'
AND x.condition_1 = 'Y'
AND x.condition_2 = 'Y'
GROUP
BY x.student_id;
+------------+---------------------+
| student_id | other_courses_total |
+------------+---------------------+
| 1004 | 1 |
+------------+---------------------+
If you want to include students with a score of zero, change the [INNER] JOIN to a LEFT JOIN and COUNT (or COALESCE(COUNT)) something on the right.