How to count NULL inside CASE?
I am not very clear on your question however you can alter your code as below for your null question:

select U.Mail, count(isnull(P.ID, 0)) as PostCount, 
    case 
        when count(P.ID) = 0 then 'none' --doesn't work
        when (count(P.ID) &lt;= 2 and count(P.ID) &gt; 0) then 'few'
        when (count(P.ID) &lt;= 5 and count(P.ID) &gt; 2 )then 'medium'
        else 'many'
    end PostCountCategory
from Users U 
left join Tag T on U.Mail = T.Mail
left join Post P on T.IDPost = P.ID
group by U.Mail


Alternatively you can use count(isnull(P.ID, 0)) inside your case statement. Hope this helps.

As suggested by Mustaccio, you may use coalesce also instead of isnull.