Более традиционное (можно сказать «лучше») решение может быть следующим:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL
,risk_no INT NOT NULL
,risk_type CHAR(1) NOT NULL
,PRIMARY KEY(id,risk_no)
);
INSERT INTO my_table VALUES
(1,1,'h'),
(2,1,'m'),
(3,1,'h'),
(4,1,'l'),
(1,2,'l'),
(2,2,'l'),
(3,2,'h'),
(4,2,'l'),
(1,3,'h'),
(2,3,'l'),
(3,3,'h'),
(4,3,'h');
SELECT id, COUNT(*) total FROM my_table WHERE risk_type = 'h' GROUP BY id;
+----+-------+
| id | total |
+----+-------+
| 1 | 2 |
| 3 | 3 |
| 4 | 1 |
+----+-------+
или
SELECT id, SUM(risk_type = 'h') total FROM my_table GROUP BY id;
+----+-------+
| id | total |
+----+-------+
| 1 | 2 |
| 2 | 0 |
| 3 | 3 |
| 4 | 1 |
+----+-------+