Tienes al menos dos errores en esa consulta:
- Por un lado estás creando en un momento dado un alias de tabla "n.num", y no puedes crear alias con puntos u operadores matemáticos. Es una pésima práctica que genera errores difíciles de ver.
Esto lo habrías notado en cuanto hubieses capturado el error de MySQL, lo que me dice que no lo estás haciendo. Capturar errores es fundamental en programación...
- Por otro lado, estás haciendo un anidamiento sin ningún sentido, el cual en definitiva te dará 1 en todos los casos.
Esto es porque la subconsulta del from ya devuelve los resultados, un registro por categoría, pero como la exterior cuenta los diferentes registros devueltos por la subconsulta, y son diferentes todos, la consulta completa te devolverá 1 en cada caso.
¿Se entiende?