SQL> CREATE TABLE marks (
`student` VARCHAR(17)
`grade` TINYINT UNSIGNED
);

SQL> INSERT INTO marks VALUES ('Alena', 6), ('Milva', 4), ('Marino', 5), ('Pablo', 5), ('Leo', 6);
INSERT INTO marks VALUES ('Alena', 5), ('Milva', 4), ('Pablo', 6), ('Leo', 2);
INSERT INTO marks VALUES ('Alena', 4), ('Milva', 3), ('Marino', 6), ('Pablo', 5), ('Leo', 4);

SQL> SELECT * FROM marks;

SQL> DELIMITER //

SQL> CREATE AGGREGATE FUNCTION agg_count(x INT) RETURNS INT
BEGIN
DECLARE count_students INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR NOT FOUND
RETURN count_students;

LOOP
FETCH GROUP NEXT ROW;
IF x THEN
SET count_students = count_students + 1;
END IF;
END LOOP;
END;
//

SQL> DELIMITER ;

SQL> SELECT student, agg_count(5) AS 'tests'
FROM marks GROUP BY student;
+---------+-------+
| student | tests |
+---------+-------+
| Alena   | 3     |
| Leo     | 3     |
| Marino  | 2     |
| Milva   | 3     |
| Pablo   | 3     |
+---------+-------+