Fido Dido
Ya te entiendo. Esto pasa por que todos los campos que quieres mostrar, los tienes en la capa superior de la consulta. La forma de corregir esto, es generar tablas para cada conteo e indexarla a la consulta.
Para que me entiendas mejor te pongo un ejemplo:
Código sql:
Ver originalpruebas=# CREATE TABLE prueba(id INTEGER, nombre text, puntos INTEGER);
CREATE TABLE
pruebas=# INSERT INTO prueba VALUES(1,'daniel',4);
INSERT 0 1
pruebas=# INSERT INTO prueba VALUES(2,'daniela',8);
INSERT 0 1
pruebas=# INSERT INTO prueba VALUES(3,'danielito',8);
INSERT 0 1
pruebas=# INSERT INTO prueba VALUES(4,'danielita',12);
INSERT 0 1
//Este sería tu caso
pruebas=# SELECT id, (CASE WHEN puntos=12 THEN COUNT(prueba.*) ELSE 0 END) AS conteo FROM prueba GROUP BY id, puntos;
id | conteo
----+--------
1 | 0
2 | 0
3 | 0
4 | 1
(4 filas)
//Esta seria la solucion al problema.
pruebas=# SELECT prueba.id, t1.conteo12 FROM prueba JOIN (SELECT id,COUNT(*) AS conteo12 FROM prueba WHERE puntos=12 GROUP BY id) AS t1 ON prueba.id = t1.id;
id | conteo12
----+---------
4 | 1
(2 filas)
Tus tablas estan un poco confusas, ojala con esto te ubiques y logres tu salida.
Un saludo.