Попробуйте что-то вроде этого:
select count(*), IF(foo >= 0, "pos", "neg") as sign from test group by sign;
, где foo - столбец с положительными или отрицательными значениями
РЕДАКТИРОВАТЬ: решение Стефана более элегантно и лучше, если вы хотите, чтобы нулевые значения обрабатывались по-разномуиз положительных и отрицательных.