Como bien comentas, no, no funciona xD
Ya lo he sacado, la consulta es bastante más compleja (al menos lo que se me ha ocurrido).
La tabla real del enunciado, que aquí simplifique a un ID y el atributo, tiene, entre otras cosas que no vienen a caso, una prinary key compuesta por dos atributos, ambos integers y el atributo en cuestión, también integer y con posibilidad de NULL.
Como por lo que nos obligan a hacer era casi de cajón que la consulta tenía que empezar como:
SELECT COUNT(*) y esto tenía que retornar el resultado, el problema estaba en generar 1 fila por cada valor de atributo, pero para ello he seguido la siguiente estrategia:
He obtenido una tupla representante de cada valor diferente de atrib. Concretamente, por cada valor de atrib escogía la tupla con mayor valor del primer atributo de la PK y, posteriormente, mayor valor del segundo atributo de la PK. Con esto tenemos 1 fila por cada valor del atributo y la consulta se esquematiza en algo como:
SELECT COUNT(*)
FROM T
WHERE // comprobar que la fila es una de las filas representantes
Para esto básicamente miraba que:
valor1 IN (SELECT MAX(t2.valor1)
FROM T t2
GROUP BY t2.atrib)
Ahora sabemos que, como mínimo, la fila tiene un valor1 que pertenece a una de las filas candidatas, solo falta comprobar vía valor2 si realmente lo es
valor2 IN (SELECT MAX(t2.valor2)
FROM T t2
WHERE t2.valor1 = valor1 AND
NOT EXISTS (/* Comprobar que esta fila realmente es la representante
mirando que no haya filas con mayor valor1 y con mismo
valor de atrib que t2.atrib */)
GROUP BY t2.atrib)
La de mierdas que hay que hacer solo por no dejar usar ciertas cosas, un código que se puede resolver con un triste:
SELECT COUNT(*)
FROM (SELECT DISTINCT atrib FROM T)