I hope this does not appear confusing but here is the query you need:
SELECT IF(rng='1 - 50','0 - 50',rng) `Range`,
IFNULL(B.rngcount,0) `Count` FROM
(
SELECT '1 - 50' rng UNION
SELECT '51 - 100' UNION
SELECT '101 - 150' UNION
SELECT '151 - 200' UNION
SELECT '201 - 250'
) A LEFT JOIN
(SELECT CONCAT(FLOOR(Result/50)*50+1,' - ',FLOOR(Result/50)*50+50) rng,
COUNT(1) rngcount FROM person GROUP BY rng) B USING (rng);
Here is your sample data from the question
mysql> USE test
Database changed
mysql> DROP TABLE IF EXISTS person;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE person (name varchar(10),result double);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO person VALUES
-> ('a', 100),('b',130.45),('c',182.96),
-> ('d', 65.45),('e', 199),('f', 245);
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM person;
+------+--------+
| name | result |
+------+--------+
| a | 100 |
| b | 130.45 |
| c | 182.96 |
| d | 65.45 |
| e | 199 |
| f | 245 |
+------+--------+
6 rows in set (0.00 sec)
mysql>
and here is the query executed:
mysql> SELECT IF(rng='1 - 50','0 - 50',rng) `Range`,
-> IFNULL(B.rngcount,0) `Count` FROM
-> (
-> SELECT '1 - 50' rng UNION
-> SELECT '51 - 100' UNION
-> SELECT '101 - 150' UNION
-> SELECT '151 - 200' UNION
-> SELECT '201 - 250'
-> ) A LEFT JOIN
-> (SELECT CONCAT(FLOOR(Result/50)*50+1,' - ',FLOOR(Result/50)*50+50) rng,
-> COUNT(1) rngcount FROM person GROUP BY rng) B USING (rng);
+-----------+-------+
| Range | Count |
+-----------+-------+
| 0 - 50 | 0 |
| 51 - 100 | 1 |
| 101 - 150 | 2 |
| 151 - 200 | 2 |
| 201 - 250 | 1 |
+-----------+-------+
5 rows in set (0.00 sec)
mysql>
Give it a Try !!!