普通にキャストする場合は

test :: integer

でよかったのだけど、
as で変数名を定義したときは

SELECT
count(test_cnt) :: integer as test_cnt,
count(test_num) :: integer as test_num
FROM
test_group
WHERE
user_id = 'uid001'
GROUP BY
test_cnt,
test_num

みたいにasの前でキャストすればよいみたい。
ずっとasの後ろでやってて怒られぱなしだった…。