Your query looks ok and should work. Perhaps the version you use has some limitations. Try this variation:
WITH a AS
( SELECT key_nbr, main_id, count,
MAX(count) OVER (PARTITION BY key_nbr) AS max_count
FROM mytable
)
SELECT a.key_nbr, a.main_id,
CASE WHEN a.key_nbr = a.main_id
THEN 'Don''t Use'
WHEN a.count = max_count
THEN 'Good'
ELSE 'Bad'
END AS flag
FROM a ;