Ошибка SQL: неправильное использование агрегата - PullRequest
23 голосов
/ 15 марта 2009

SQLite версия 3.4.0 Что не так с агрегатными функциями? Кроме того, я подозреваю, что ORDER BY также не будет работать. Как переписать это?

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>

Ответы [ 2 ]

66 голосов
/ 15 марта 2009

При использовании агрегатной функции (сумма / количество / ...) также необходимо использовать предложение GROUP BY.

Кроме того, когда вы хотите отфильтровать результаты агрегата, вы не можете сделать это в предложении WHERE, но вы должны сделать это в предложении 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;
4 голосов
/ 03 мая 2017

Краткое исправление для этого:

Когда вы используете функцию типа COUNT/SUM, вам нужно использовать HAVING вместо WHERE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...