Error de SQL: uso indebido del agregado

SQLite versión 3.4.0 ¿Qué hay de malo con las funciones agregadas? Además, sospecho que ORDER BY no funcionará tan bien. ¿Cómo reescribir esto?

sqlite> SELECT p1.domain_id, p2.domain_id, COUNT(p1.domain_id) AS d1, COUNT(p2.domain_id) AS d2 ...> FROM PDB as p1, Interacting_PDBs as i1, PDB as p2, Interacting_PDBs as i2 ...> WHERE p1.id = i1.PDB_first_id ...> AND p2.id = i2.PDB_second_id ...> AND i1.id = i2.id ...> AND d1>100 ...> AND d2>100 ...> ORDER BY d1, d2; SQL error: misuse of aggregate: sqlite> 

Al usar una function agregada (sum / count / …), también debe usar la cláusula GROUP BY.

Además de eso, cuando quiere filtrar el resultado de un agregado, no puede hacer eso en la cláusula WHERE, pero debe hacerlo en la cláusula HAVING.

 SELECT p1.domain_id, p2.domain_id, COUNT(p1.domain_id) AS d1, COUNT(p2.domain_id) AS d2 FROM PDB as p1, Interacting_PDBs as i1, PDB as p2, Interacting_PDBs as i2 WHERE p1.id = i1.PDB_first_id AND p2.id = i2.PDB_second_id AND i1.id = i2.id GROUP BY p1.domain_Id, p2.domain_Id HAVING d1 > 100 AND d2 > 100 ORDER BY d1, d2; 

La corrección de versión corta para esto es:

Cuando usa una function como COUNT/SUM , necesita usar HAVING lugar de WHERE .